Маршрутизация подпапки контроллера Laravel
Я новичок в Laravel. Чтобы попытаться сохранить мое приложение, я хотел бы поместить мои контроллеры в подпапки папки контроллера.
controllers\
---- folder1
---- folder2
Я попытался перейти к контроллеру, но laravel его не нашел.
Route::get('/product/dashboard', '[email protected]');
Что я делаю неправильно?
Ответы
Ответ 1
Для Laravel 5.3 выше:
php artisan make:controller test/TestController
Это создаст test
папку, если она не существует, а затем создаст TestController
внутри.
TestController
будет выглядеть так:
<?php
namespace App\Http\Controllers\test;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function getTest()
{
return "Yes";
}
}
Затем вы можете зарегистрировать свой маршрут следующим образом:
Route::get('/test','test\[email protected]');
Ответ 2
Добавьте свои контроллеры в свои папки:
controllers\
---- folder1
---- folder2
Создайте свой маршрут, не указав папку:
Route::get('/product/dashboard', '[email protected]');
Запустить
composer dump-autoload
И попробуйте еще раз
Ответ 3
Для тех, кто использует Laravel 5, вам нужно установить пространство имен для контроллера внутри подкаталога (Laravel 5 все еще находится в разработке, и изменения происходят ежедневно)
Чтобы получить структуру папок, например:
Http
----Controllers
----Admin
PostsController.php
PostsController.php
namespace Admin\PostsController.php файл следующим образом:
<?php namespace App\Http\Controller\Admin;
use App\Http\Controllers\Controller;
class PostsController extends Controller {
//business logic here
}
Тогда ваш маршрут для этого:
$router->get('/', 'Admin\[email protected]');
И, наконец, не делайте ни композитор, ни кустарник
composer dump-autoload
или
php artisan dump
Ответ 4
1.Создайте свою подпапку, как показано ниже:
app
----controllers
--------admin
--------home
2. сконфигурируйте свой код в app/routes.php
<?php
// index
Route::get('/', 'Home\[email protected]');
// admin/test
Route::group(
array('prefix' => 'admin'),
function() {
Route::get('test', 'Admin\[email protected]');
}
);
?>
3.write sth в приложении/контроллерах/admin/IndexController.php, например:
<?php
namespace Admin;
class IndexController extends \BaseController {
public function index()
{
return "admin.home";
}
}
?>
4.доступьте свой сайт, например: localhost/admin/test
вы увидите "admin.home" на странице
ps: Пожалуйста, проигнорируйте мой плохой английский
Ответ 5
Для ** Laravel 5 или Laravel 5.1 LTS **, если у вас есть несколько контроллеров в папке администратора, Route::group
будет действительно полезной для вас. Например:
Обновление: работает с Laravel 5.4
Моя папка Структура:
Http
----Controllers
----Api
----V1
PostsApiController.php
CommentsApiController.php
PostsController.php
PostAPIController:
<?php namespace App\Http\Controllers\Api\V1;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostApiController extends Controller {
...
В My Route.php я установил для группы namespace
значение Api\V1
и в целом это выглядит так:
Route::group(
[
'namespace' => 'Api\V1',
'prefix' => 'v1',
], function(){
Route::get('posts', ['uses'=>'[email protected]']);
Route::get('posts/{id}', ['uses'=>'[email protected]']);
});
Для перемещения деталей для создания подпапки перейдите по этой ссылке.
Ответ 6
Просто нашел способ, как это сделать:
Просто добавьте пути к /app/start/global.php
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
Ответ 7
php artisan make:controller admin/CategoryController
Здесь
admin - это подкаталог в приложении /Http/Controllers и
CategoryController - это контроллер, который вы хотите создать внутри каталога
Ответ 8
Я использую Laravel 4.2. Вот как я это делаю:
У меня есть структура каталогов, подобная этой:
приложение
--controllers
---- admin
------ AdminController.php
После того, как я создал контроллер, я поместил в composer.json путь к новому каталогу admin:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
Далее я запустил
composer dump-autoload
а затем
php artisan dump-autoload
Затем в route.php у меня есть контроллер, включенный вот так:
Route::controller('admin', 'AdminController');
И все работает нормально.
Ответ 9
Если вы используете Laravel 5.3 или выше, вам не нужно вникать в такую сложность, как говорили другие ответы.
Просто используйте команду artisan по умолчанию для создания нового контроллера.
Например, если я хочу создать контроллер User
в папке User
.
Я бы напечатал
php artisan make:controller User/User
В маршрутах
Route::get('/dashboard', 'User\[email protected]');
делать это было бы хорошо, и теперь на localhost/dashboard находится страница, на которой находится страница.
Надеюсь, что это поможет.
Ответ 10
В Laravel 5.6 предполагается, что имя вашей подпапки ' Api
:
В вашем контроллере вам нужны эти две строки:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
И в вашем файле маршрута api.php
вам нужно:
Route::resource('/myapi', 'Api\MyController');
Ответ 11
Я думаю, что держать контроллеры для Admin и Front в отдельных папках, пространство имен будет работать хорошо.
Посмотрите на нижерасположенную структуру каталогов Laravel, которая отлично подходит для меня.
app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php
Маршруты в файле "routes/web.php" будут ниже
/* All the Front-end controllers routes will work under Front namespace */
Route::group(['namespace' => 'Front'], function () {
Route::get('/home', '[email protected]');
});
И для раздела Admin он будет выглядеть как
/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication,
so an middleware auth also applied in admin namespace */
Route::group(['namespace' => 'Admin'], function () {
Route::group(['middleware' => ['auth']], function() {
Route::get('/', ['as' => 'home', 'uses' => '[email protected]']);
});
});
Надеюсь, это поможет!
Ответ 12
Вот как вы можете организовать свое приложение:
Каждый файл маршрута (web.php
, api.php
...) объявляется в методе map()
, в файле
\app\Providers\RouteServiceProvider.php
Когда вы отображаете файл маршрута, вы можете установить для него ->namespace($this->namespace)
, вы увидите его там среди примеров.
Это означает, что вы можете создавать больше файлов, чтобы сделать ваш проект более структурированным!
И установите разные пространства имен для каждого из них.
Но я предпочитаю установить empty string
для пространства имен ""
Это дает вам возможность настроить ваши контроллеры для маршрутизации собственным способом php, см. Пример:
Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
Теперь вы можете дважды щелкнуть имена контроллеров в IDE, чтобы быстро и удобно туда добраться.
Ответ 13
У меня недавно была эта проблема с Laravel 5.8, но я недооцениваю, что я должен правильно определить контроллер следующим образом:
php artisan make:controller SubFolder\MyController // true
не так:
php artisan make:controller SubFolder/MyController // false
тогда вы можете получить доступ к контроллеру в маршрутах /web.php следующим образом:
Route::get('/my', 'SubFolder\[email protected]');