Laravel 4嵌套控制器和路由

Jam*_*ery 4 php laravel laravel-4

是否可以调用嵌套在Laravel 4中的子文件夹中的控件?

我的控制器如下

- Controllers
    - admin
        * AdminController.php
* HomeController.php
* BaseController.php
* ArticleController.php
Run Code Online (Sandbox Code Playgroud)

以下是我的AdminController类的代码:

<?php

class LoginController extends BaseController {

    public function showLogin() 
    {
    return View::make('partials.admin.login');
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Routes.php文件中,我正在执行以下操作:

Route::get('/admin', 'admin.LoginController@showLogin');
Run Code Online (Sandbox Code Playgroud)

但我得到一个Class not found错误.有什么我想念的,因为我似乎无法从Laravel 4文档中找到解决这个问题的方法.

Sin*_*ine 16

只要您不更改控制器的命名空间,即使它位于子文件夹中,您也应该能够从全局命名空间访问它.

所以只需改变:

Route::get('/admin', 'admin.LoginController@showLogin');
Run Code Online (Sandbox Code Playgroud)

至:

Route::get('/admin', 'LoginController@showLogin');
Run Code Online (Sandbox Code Playgroud)

文件名还需要与类名匹配,因此将'AdminController.php'更改为'LoginController.php'或将类名从'LoginController'更改为'AdminController'.

并确保你这样做 composer dump-autoload


ahm*_*mdy 10

你只需要添加namespace在你AdminController.php的文件并更改名称之类的LoginControllerAdminController

AdminController.php 那么将是:

<?php

    namespace Admin;
    use BaseController;

    class LoginController extends BaseController {

        public function showLogin() 
        {
        return View::make('partials.admin.login');
        }
    }
Run Code Online (Sandbox Code Playgroud)

并将你routes.php改为:

Route::get('/admin', 'admin\LoginController@showLogin');
Run Code Online (Sandbox Code Playgroud)