是否可以调用Laravel 4中嵌套在子文件夹中的控件?
我的控制器如下
- Controllers
- admin
* AdminController.php
* HomeController.php
* BaseController.php
* ArticleController.php
下面是我的AdminController类的代码:
<?php
class LoginController extends BaseController {
public function showLogin()
{
return View::make('partials.admin.login');
}
}
在我的Routes.php文件中,我做了以下操作:
Route::get('/admin', 'admin.LoginController@showLogin');
但是我得到一个类未找到错误。是否有什么我错过了,因为我似乎无法找到如何解决这个问题从Laravel 4文档
只要你不改变控制器的命名空间,你应该能够从全局命名空间访问它,即使它在子文件夹中。
所以改成:
Route::get('/admin', 'admin.LoginController@showLogin');
:
Route::get('/admin', 'LoginController@showLogin');
文件名也需要匹配类名,所以将'AdminController.php'更改为'LoginController.php'或将类名从'LoginController'更改为'AdminController'。
确保是composer dump-autoload
您只需要在AdminController.php
文件中添加namespace
,并将类名称从LoginController
更改为AdminController
AdminController.php
则为:
<?php
namespace Admin;
use BaseController;
class LoginController extends BaseController {
public function showLogin()
{
return View::make('partials.admin.login');
}
}
并将routes.php
更改为:
Route::get('/admin', 'admin'LoginController@showLogin');
当我将admin控制器存储在控制器目录app/controllers/admin的子目录中时,遇到了一个问题
我必须将这个目录添加到我的编写器中的自动加载类映射列表中。json文件然后运行composer dump- auload
在composer.json
中为"app/controllers"添加尾斜杠:
"autoload": {
"classmap": [
"app/commands",
"app/controllers/",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
然后运行composer dump-autoload
可能已经太晚了,但是一种可能的方法是使用名称空间。下面是我的例子:routes.php:
Route::group(array('prefix' => 'admin' , 'before' => 'admin' ), function()
{
Route::controller('contacts' , ''backend'ContactController');
...
}
和在你的后端控制器的顶部添加这些行:
namespace backend;
use 'view as view;
并将这些行添加到您的作曲家中。Json在classmap指令中:
"app/controllers/backend",
"app/controllers/front",