404 Страница не найдена ошибка при попытке доступа к пользовательскому модулю в Magento 2

8

Я создал 2 пользовательских модуля в папке vendor. Это моя структура макета:

-app
  -code
    -Company
      -Blog
      -HelloWorld
        -Controller
          -Hello
            -World.php
        -registration.php
        -etc
          -module.xml
          -frontend
            -routes.xml

Оба включены.

Это мой код для routes.xmlмодуля HelloWorld:

 <?xml version="1.0"?>
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
  <router id="standard">
    <route id="helloworld" frontName="helloworld">
        <module name="Company_HelloWorld"/>
    </route>
 </router>
</config>

Это мой код в module.xml:

 <?xml version="1.0"?>
   <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Company_HelloWorld" setup_version="1.0.0">
   </module>
   </config>

Это мой файл registration.php:

<?php 
   \Magento\Framework\Component\ComponentRegistrar::register(
   \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Company_HelloWorld',
    __DIR__
);

Это мой код контроллера:

 <?php
 namespace Company\HelloWorld\Controller\Hello;


 class World extends \Magento\Framework\App\Action\Action
 {
   public function __construct(
    \Magento\Framework\App\Action\Context $context)
  {
      return parent::__construct($context);
  }

  public function execute()
  {
    echo 'Hello World';
    exit;
  } 
} 

Это мой код компоновки:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>

</body>
</page>

И то же самое для другого модуля. Я уже выполнил setup:upgradeкоманду, но все равно получаю ошибку 404, когда пытаюсь получить доступ к любому из этих модулей.

user2431224
источник
Можете
Я обновил свой вопрос. В настоящее время я дал выход; в execute () метод контроллера, но он даже не входит в контроллер, я думаю.
user2431224
В magento2 Вы можете создать модуль Внутри app/codeпапки
MaYaNk
Я создал только внутри приложения / кода.
user2431224
Я не могу полностью понять вашу структуру макета.
MaYaNk

Ответы:

5

Попробуй это module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Company_HelloWorld" setup_version="1.0.0" active="true">

Mayank
источник
все та же ошибка.
user2431224
Я отредактировал свой ответ
MaYaNk
попробуй сменить setup_version="1.0.0" на setup_version="2.0.1"
MaYaNk
1

Вы не создали ни одного контроллера, поэтому он не найдет URL, поэтому он выдаст ошибку 404

Создать папку контроллера

Создать индексную папку внутри папки контроллера

Создайте файл Index.php внутри папки Index и добавьте в нее код ниже.

<?php

namespace  Company\HelloWorld\Controller\Index;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\Action\Context;
class Index extends \Magento\Framework\App\Action\Action
{
    protected $resultPageFactory;
     public function __construct(
        Context $context,
        PageFactory $resultPageFactory
    ) {
        $this->resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }
    /**
     * Index action
     *
     * @return $this
     */
    public function execute()
    {
        echo "helloworld";exit;
    }   



}

Теперь вы можете проверить URL helloworld/index/index

Прашант Валанда
источник
Конечно, я создал контроллер. Я просто не
вставил
Я добавил код контроллера в мой вопрос.
user2431224
Какой URL вы пытаетесь?
Прашант Валанда
Теперь приходит метод execute () контроллера, но отображается только пустая страница. localhost / magento-demo / helloworld / hello / world
user2431224
Это сработало после того, как я выполнил команду cache flush.
user2431224
0

Вам нужно изменить код в 2 файлах,

Приложение / код / ​​Компания / HelloWorld / и т.д. / интерфейс / routes.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
  <router id="standard">
    <route id="company_helloworld" frontName="helloworld">
        <module name="Company_HelloWorld"/>
    </route>
 </router>
</config>

Приложение / код / ​​Компания / HelloWorld / и т.д. / module.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Company_HelloWorld" setup_version="2.1.1">
   </module>
   </config>

Я только что сделал эти два изменения, запустите установку php bin / magento: обновление и все работает нормально.

локальный / Magento-демо / index.php / HelloWorld / привет / мир /

введите описание изображения здесь

Rushvi
источник
0

Я выполнил кэш bin \ magento: flush & Очевидно, это сработало. Это была проблема с кешем.

user2431224
источник
0

Просто попробуйте развернуть контент и обновить настройки

Настройка php bin / magento: обновление

php bin / magento setup: static-content: deploy

Амит Лал
источник