Laravel 4嵌套控制器和路由


Laravel 4 Nested Controllers and Routing

是否可以调用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",