尝试运行控制器时出现以下错误
未找到控制器类
我的routes.php
文件
Route::get('cms/create-page', 'AdminCMSController@create_page');
Route::post('cms/createpage','AdminCMSController@createpage');
Route::controller('cms','AdminCMSController');
这是我的控制器中的代码
class AdminCMSController extends BaseController {
public function create_page() {
}
public function createpage() {
}
}
我该如何解决?
答案 0 :(得分:11)
如果您没有从原始位置(controllers
)移动«project_root»/app/controllers/
目录,则必须保证:
Laravel的自动加载有controller
目录。导航至«project_root»/app/start/global.php
。你需要有这样的东西:
(...)
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
));
(...)
注意这一行app_path().'/controllers'
。它必须存在。
此外,打开composer.json
文件并验证是否存在以下行:
(...)
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
],
(...)
确保您拥有app/controllers
如果您有这些行并且仍然收到相同的消息,请转到项目根目录并从命令行composer dumpautoload -o
运行以下命令。
Laravel与Composer一起使用,see composer docs是PHP的依赖管理工具。它还为所有项目类(PSR-0)准备自动加载文件。运行composer dumpautoload
命令时,它将在«project_root»/vendor/composer
中创建一些文件。
确保您可以在文件AdminCMSController
中找到课程«project_root»/vendor/composer/autoload_classmap.php
。你应该看到这样的东西:
'AdminCMSController' => $baseDir . '/app/controllers/AdminCMSController.php',
如果您更改了controllers
目录的默认位置,则必须执行以下任一步骤。但是,由于您没有在类中定义命名空间,因此这似乎不是您的问题所在:
使用Refer to the wikipedia进行自动加载课程。想象一下,您有以下文件夹结构:
/app
/commands
/config
/database
/Acme
/controllers
您必须在Acme
中指定composer.json
文件夹,如下所示:
"autoload": {
"classmap": [
"app/commands",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
],
"psr-0": {
"Acme": "app/"
}
},
在此之后,您需要使用命令composer dumpautoload
更新作曲家自动加载文件。
如果您不想使用PSR-0进行自动加载,则需要从此处更改路径文件
Route::controller('cms','AdminCMSController');
到此:
Route::controller('cms','Acme\controllers\AdminCMSController');
如果你使用PSR-0,你需要像这样命名你的类:
<?php namespace Acme\controllers;
class AdminCMSController extends BaseController {
(...)
}
对Acme
引用感到好奇吗?我也是。 {{3}}