Codeigniter 4: создание модулей - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь создать модули в Codeigniter 4 для работы с H MVC. Я пытался следовать этому руководству пользователя https://codeigniter4.github.io/userguide/general/modules.html, но не могу заставить его работать.

Я создал папку 'modules' рядом с приложением publi c et c. папки.

Добавлено в app / config / autoload. php

'Modules' => ROOTPATH.'modules'

Внутри папки модулей я создал папку 'Proef', содержащую папку Controllers и 'Proef. php' файл.

Файл содержит следующее:

namespace App\Modules\Proef\Controllers;
class Proef extends \CodeIgniter\Controller
{
  public function index() {
    echo 'hello!';
  }
}

В файле app / config.routes. php Я добавил

$routes->group('proef', ['namespace' => 'Modules\Proef\Controllers'], function($routes)
{
    $routes->get('/', 'Proef::index');
});

Тем не менее, следующее Ошибка сохраняется: Контроллер или его метод не найден: \ Modules \ Proef \ Controllers \ Proef :: index

Чего мне не хватает?

1 Ответ

0 голосов
/ 12 апреля 2020

Если вы поместите папку своих модулей «рядом», а не в папку приложения, значит ваше пространство имен неправильное.

Таким образом, вы получите что-то вроде

app/
Modules/   ==> can be modules or Modules but must be set in autoload with the same case
    Proef/
       Controllers/
           Proef.php

ПРИМЕЧАНИЕ: модули могут быть Модули или модули, но соответствующая запись в автозагрузке должна совпадать.

  1. Для модулей 'Модули' => ROOTPATH. 'modules'

  2. Для модулей 'Modules' => ROOTPATH. «Модули»

По результатам моего ограниченного тестирования выясняется, что имена других папок должны быть в верхнем регистре с 1-й буквой. Это под Apache на Linux.

давайте использовать Модули для имени папки, поэтому в Автозагрузка. php у нас будет ...

$psr4 = [
    'App'         => APPPATH,                // To ensure filters, etc still found,
    APP_NAMESPACE => APPPATH,                // For custom namespace
    'Config'      => APPPATH . 'Config',
    'Modules'     => ROOTPATH . 'Modules'
];

Итак, ваш Proef Controller - Proef. php ... Обратите внимание на используемое пространство имен.

<?php
namespace Modules\Proef\Controllers;
use App\Controllers\BaseController;

class Proef extends BaseController {
    public function index() {
        echo 'Hello - I am the <strong>'. __CLASS__ . '</strong> Class';
    }
}

Чтобы сделать его доступным через URL, вы можете установить маршруты ( Маршруты. php) в ... (простая версия)

$routes->get('/proef', '\Modules\Proef\Controllers\Proef::index');

Чтобы сделать его доступным для других контроллеров ... (Я позаимствовал Домой. php для этого)

<?php namespace App\Controllers;

use \Modules\Proef\Controllers\Proef;

class Home extends BaseController
{
    public function index()
    {
        $mProef = new Proef();
        $mProef->index();

        return view('welcome_message');
    }

    //--------------------------------------------------------------------

}

В вашем URL - / proef приведет к тому, что просто сообщение / home приведет к сообщению класса и странице приветствия.

Надеюсь, это поможет вам понять это. Это очень весело:)

В стороне:

Вы можете поместить свою папку модулей в любом месте. Я помещаю свой в app / для ole раз ради, который устраняет необходимость добавлять запись в Autoload. php, поскольку они попадают в app /, который уже определен.

Пространство имен и оператор use должны быть изменилось соответствующим образом.

...