4

是否可以调用嵌套在 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');

但我得到一个 Class not found 错误。有什么我遗漏的,因为我似乎无法从 Laravel 4 文档中找到如何解决这个问题。

4

5 回答 5

16

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

所以只需改变:

Route::get('/admin', 'admin.LoginController@showLogin');

到:

Route::get('/admin', 'LoginController@showLogin');

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

并确保你这样做composer dump-autoload

于 2013-05-31T00:15:30.603 回答
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');
        }
    }

并将您的更改routes.php为:

Route::get('/admin', 'admin\LoginController@showLogin');
于 2013-09-13T18:24:07.907 回答
4

当我将管理控制器存储在控制器目录 app/controllers/admin 的子目录中时遇到问题

我必须将此目录添加到我的 composer.json 文件中的自动加载类映射列表然后运行 ​​composer dump-autoload

于 2013-07-10T21:58:05.197 回答
2

在对我有用的“应用程序/控制器”中添加斜杠composer.json

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers/",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},

然后运行composer dump-autoload

于 2013-11-03T22:03:30.603 回答
0

可能为时已晚,但可能的方法之一是使用命名空间。这是我的示例: routes.php :

Route::group(array('prefix' => 'admin' , 'before' => 'admin' ), function()
{
Route::controller('contacts' , '\backend\ContactController');
...
}

并在您的后端控制器顶部添加添加这些行:

namespace backend;
use \view as view;

并在 classmap 指令中将这些行添加到您的 composers.json 中:

"app/controllers/backend",
 "app/controllers/front",
于 2015-01-23T11:43:12.797 回答