Как вызвать метод контроллера подпапок в Routes в CodeIgniter 4

У меня есть контроллеры в подпапках

--Controllers
----Admin
--------UserController
--------AccountController
----User
--------UserController
--------AccountController

Я пишу маршруты для него

$routes->group('user', function ($routes){
    $routes->get('dashboard', 'UserDashboard::index');
    $routes->get('changePassword', 'User\AccountController::changePassword');
});

Это дает мне 404, хотя у меня есть метод и что-то выводится.

Код контроллера

<?php namespace App\Controllers;

use App\Controllers\BaseController;

class AccountController extends BaseController
{
    public function index()
    {
        echo "Hello";
        exit();
        return view('user/account/changePassword');
    }

    public function changePassword()
    {
        echo "Change Password View";
        exit();
        return view('user/account/changePassword');
    }
}

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


person Syed Suhaib Zia    schedule 29.12.2020    source источник
comment
Мне любопытно, почему у вас есть public в вашем URL. Можете ли вы объяснить, почему это там?   -  person TimBrownlaw    schedule 30.12.2020
comment
Я согласен с @TimBrownlaw public не должен быть в URL-адресе. На самом деле было бы лучше даже не работать с локальным хостом и работать с правильным локальным доменом, таким как foo.local, чтобы вы могли лучше имитировать реальную окружающую среду.   -  person marcogmonteiro    schedule 30.12.2020
comment
Это решено из-за использования неправильного пространства имен. @TimBrownlaw является общедоступным, потому что файл index.php находится в той папке, а не в корневой папке.   -  person Syed Suhaib Zia    schedule 31.12.2020
comment
@marcogmonteiro спасибо за совет, я последовал тому же, что и вы сказали, и теперь это хорошо и очень легко   -  person Syed Suhaib Zia    schedule 31.12.2020


Ответы (1)


Вам нужно изменить пространство имен ваших контроллеров.

Пользовательские контроллеры

<?php namespace App\Controllers\User;

use App\Controllers\BaseController;

class AccountController extends BaseController
{
    
}

Контроллеры администратора

<?php namespace App\Controllers\Admin;

use App\Controllers\BaseController;

class AccountController extends BaseController
{
    
}
person marcogmonteiro    schedule 30.12.2020
comment
Спасибо, сэр, это была основная проблема. Теперь это решено - person Syed Suhaib Zia; 31.12.2020