Что-то я совсем в пятницу вечером затупил. Вот есть у меня контроллер который лежит по такому пути: Код (Text): /app/Http/Controllers/MoveController.php И я могу его использовать так: Код (Text): Route::get('/home', 'MoveController@index')->name('home'); Но мне нужно разместить этот контроллер в подкаталоге. Я перемещаю его в подкаталог personalArea: Код (Text): /app/Http/Controllers/personalArea/MoveController.php И пробую его использовать так: Код (Text): Route::get('/home', 'personalArea\MoveController@index')->name('home'); И мне в ответ ошибка: Код (Text): Class App\Http\Controllers\personalArea\MoveController does not exist Я пробовал в качестве разделителя и "." и "/", но толку никакого. В чем проблема?
не надо так делать. Положил в подкаталог, а используешь как обычно. В общем верни роутер как был. Неймспейс - это не путь "по папочкам". У него своя логика, которая к папкам практически отношения не имеет.
https://svyatoslav.biz/misc/psr_translation/#_PSR-4 https://laravel.com/docs/master/controllers#controllers-and-namespaces Просто переместить в папку не достаточно. Нужно namespace создать.Обычно объединяют связанные каким-то образом классы в одно пространство имён
Так как правильно делать то? --- Добавлено --- По вашей ссылке на доку Laravel аписано: Тут ничего про контроллер в подкаталоге не сказано. Тут только про организацию имен в namespace. А как пользовать контроллер в подкаталоге - не пойму. И да, я пробовал прописать в классе контроллера так: Код (Text): // namespace App\Http\Controllers; namespace App\Http\Controllers\personalArea; use Illuminate\Http\Request; class MoveController extends Controller { Но толку от этого тоже нет.
Это должно было сработать. Видимо какое-то ещё условие. Какая ОС? --- Добавлено --- Поэтому дал первую ссылку, Laravel следует PSR-4 --- Добавлено --- Я бы залез отладчиком в автозагрузчик, и посмотрел, чего он пытается искать.
vendor/composer/ClassLoader.php - вот этот файлик, смотришь его отладчиком. В качестве предположения, у Laravel все неймспейсы контроллеров с большой буквы, ты сделал с маленькой. Может Laravel где преобразует таки букву в большую... Точно не знаю, я просто всегда следовал большой букве, и у меня проблемы такой никогда с Laravel не возникало. --- Добавлено --- Так же попробуй команду Код (Text): composer dump-autoload , чтоб обновить кеш композера.
В общем нашел в чем проблема была. Когда прописываю namespace App\Http\Controllers\personalArea, я выхожу из namespace App\Http\Controllers, в котором существовал класс Controller. Поэтому еще нужно было прописать: Код (Text): use Illuminate\Routing\Controller;
По материалам темы написал статью: Как в Laravel создать контроллер в поддиректории, и как в роутинге писать к нему путь
Должно было сообщение об ошибке измениться, а ты об этом не написал. --- Добавлено --- А потом будешь писать статью, как сделать модель в другом каталоге и т.п.? Всё же просто: нужно следовать PSR-0 и PSR-4, если используешь Laravel (ну и не только его, кстати). Читаешь про PSR-4 и становится очевидно, почему нужно прописать namespace при перемещении контроллера. --- Добавлено --- Вот в официальном руководстве про PSR написано: https://laravel.com/docs/master/structure#the-app-directory