Laravel控制器子文件夹路由
我是Laravel的新手。 要尝试保持我的应用程序组织,我想把我的控制器到控制器文件夹的子文件夹。
controllers\ ---- folder1 ---- folder2
我试图路由到一个控制器,但laravel没有find它。
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
我究竟做错了什么?
上面的Laravel 5.3
php artisan make:controller test\TestController
这将创buildtesting文件夹,如果它不存在然后创buildTestController里面。
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
创build您的路线不指定文件夹:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
跑
composer dump-autoload
然后再试一次
对于那些使用Laravel 5的人,你需要在子目录中设置控制器的命名空间(Laravel 5仍在开发中,每天都在进行更改)
要得到如下的文件夹结构:
Http ----Controllers ----Admin PostsController.php PostsController.php
命名空间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 php或工匠转储
composer dump-autoload
要么
php artisan dump
1.创build你的子文件夹,如下所示:
app ----controllers --------admin --------home
2.在app / routes.php中configuration你的代码
<?php // index Route::get('/', 'Home\HomeController@index'); // admin/test Route::group( array('prefix' => 'admin'), function() { Route::get('test', 'Admin\IndexController@index'); } ); ?>
3.在app / controllers / admin / IndexController.php中写入,例如:
<?php namespace Admin; class IndexController extends \BaseController { public function index() { return "admin.home"; } } ?>
访问你的网站,例如:localhost / admin / test你会在页面上看到“admin.home”
ps:请忽略我可怜的英语
只是find了一个方法如何做到这一点:
只需将path添加到/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 4.2。 我在这里怎么做:
我有一个这样的目录结构:
应用
–controllers
—-pipe理
—— AdminController.php
在创build控制器之后,我把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
然后在routes.php我有这样的控制器:
Route::controller('admin', 'AdminController');
一切正常。
对于** Laravel 5或Laravel 5.1 LTS都是**,如果您在Admin文件夹中有多个控制器,则Route::group
将对您非常有用。 例如:
我的文件夹结构:
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']); });
对于移动细节创build子文件夹访问下面的链接: https : //laracasts.com/discuss/channels/general-discussion/reflectionexception-class-apphttpcontrollersadminadmincontroller-does-not-exist
php artisan make:controller admin/CategoryController
这里的pipe理员是app / Http / Controllers下的子目录,CategoryController是你想在目录下创build的控制器
如果您使用的是Laravel 5.3或更高版本,则不需要像其他答案所述那样陷入如此复杂的程度。 只需使用默认的artisan命令来生成一个新的控制器。 例如,如果我想在User
文件夹中创build一个User
控制器。 我会打字
php artisan make:controller User/User
在路线上,
Route::get('/dashboard', 'User\User@dashboard');
这样做会很好,现在在本地主机/仪表板是页面所在的地方。
希望这可以帮助。
我认为要保持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'); });
而对于pipe理部分,它会看起来像
/* 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']); }); });
希望这可以帮助!!