Я новичок в Laravel. Чтобы попытаться сохранить мое приложение, я хотел бы поместить мои контроллеры в подпапки папки контроллера.
controllers\
---- folder1
---- folder2
Я попытался перейти к контроллеру, но laravel его не нашел.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
Что я делаю неправильно?
для Laravel 5.3 выше
php artisan make:controller test/TestController
Это создаст тестовую папку, если она не существует, а затем создаст 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\TestController@getTest');
Добавьте свои контроллеры в свои папки:
controllers\
---- folder1
---- folder2
Создайте свой маршрут, не указав папку:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
Запустить
composer dump-autoload
И попробуйте еще раз
artisan dump-autoload
тоже или composer dump-autoload
достаточно?
ClassLoader::addDirectories
, которого нет в composer, вам также понадобится ремесленник.
Для тех, кто использует 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\PostsController@index');
И, наконец, не делайте ни композитор, ни кустарник
composer dump-autoload
или
php artisan dump
1.Создайте свою подпапку, как показано ниже:
app
----controllers
--------admin
--------home
2. сконфигурируйте свой код в app/routes.php
<?php
// index
Route::get('/', 'Home\HomeController@index');
// admin/test
Route::group(
array('prefix' => 'admin'),
function() {
Route::get('test', 'Admin\IndexController@index');
}
);
?>
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: Пожалуйста, проигнорируйте мой плохой английский
Для ** 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'=>'PostsApiController@index']);
Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']);
});
Для перемещения деталей для создания подпапки перейдите по этой ссылке.
php artisan make:controller admin/CategoryController
Здесь admin - это подкаталог в приложении /Http/Controllers и CategoryController - это контроллер, который вы хотите создать внутри каталога
Я использую 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');
И все работает нормально.
Просто нашел способ, как это сделать:
Просто добавьте пути к /app/start/global.php
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
Если вы используете Laravel 5.3 или выше, вам не нужно вникать в такую сложность, как говорили другие ответы.
Просто используйте команду artisan по умолчанию для создания нового контроллера.
Например, если я хочу создать контроллер User
в папке User
.
Я бы напечатал
php artisan make:controller User/User
В маршрутах
Route::get('/dashboard', 'User\User@dashboard');
делать это было бы хорошо, и теперь на localhost/dashboard находится страница, на которой находится страница.
Надеюсь, что это поможет.
В Laravel 5.6 предполагается, что имя вашей подпапки ' Api
:
В вашем контроллере вам нужны эти две строки:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
И в вашем файле маршрута api.php
вам нужно:
Route::resource('/myapi', 'Api\MyController');
Я думаю, что держать контроллеры для 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', 'HomeController@index');
});
И для раздела 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' => 'DashboardController@index']);
});
});
Надеюсь, это поможет!
php artisan make:controller test\TestController
создает testTestController.php, тогда какphp artisan make:controller 'test\TestController'
работает. (Обратите внимание на цитаты) - Laravel 5.4