流明:App\Http\Controllers\Controller class 全新安装未找到
lumen: App\Http\Controllers\Controller class not found with fresh install
我正在使用 全新安装 Lumen(构建网络 API),大部分工作正常,但当我尝试使用路由器来指向 class 我收到此错误:
Fatal error: Class 'App\Http\Controllers\Controller' not found in /Applications/MAMP/htdocs/moments/lumen/app/Http/Controllers/MomentController.php on line 5
这是我在 app/Http/routes 中的 路由器 。php
$app->get('/', 'MomentController@index');
这是我在 app/Http/Controllers/MomentControllerclass。php
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MomentController extends Controller {
public function index()
{
echo 123;
}
}
我已经在 bootstrap/app 中激活了这些组件。php:
$app->withFacades();
$app->withEloquent();
Dotenv::load(__DIR__.'/../');
这是我的composer.json文件:
{
"name": "laravel/lumen",
"description": "The Laravel Lumen Framework.",
"keywords": ["framework", "laravel", "lumen"],
"license": "MIT",
"type": "project",
"require": {
"laravel/lumen-framework": "5.1.*",
"vlucas/phpdotenv": "~1.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"fzaninotto/faker": "~1.0"
},
"autoload": {
"psr-4": {
"App\": "app/"
},
"classmap": [
"database/"
]
},
"autoload-dev": {
"classmap": [
"tests/"
]
},
"config": {
"preferred-install": "dist"
}
}
我认为这与命名空间有关,但我想不通。有什么线索吗?
谢谢,
删除 use App\Http\Controllers\Controller;
,因为不需要那个。
然后检查您的 composer.json 是否为 app
目录启用了 psr-4。
此外,尝试在命令行上使用 composer du
来转储并重新生成自动加载文件。
试试这个
$app->get('/', 'App\Http\Controllers\MomentController@index');
或(更好)将它们分组
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'MomentController@index');
$group->get('foo', 'MomentController@otherAction');
});
并删除 use App\Http\Controllers\Controller;
如@lowerends
解决方案是 link 到正确的基本控制器,以便它可以扩展那个 class。
use Laravel\Lumen\Routing\Controller as BaseController;
这一行是我唯一必须添加的内容才能使其正常工作。
所以完整的class变成了这样:
<?php namespace App\Http\Controllers;
use Laravel\Lumen\Routing\Controller as BaseController;
class ChannelController extends BaseController {
public function getChannels(){}
public function getChannel(){}
}
我想您已经使用 lumen new
而不是 composer create-project laravel/lumen --prefer-dist
创建了一个项目。您可以尝试使用 composer 创建一个新的 lumen 项目并尝试重现此问题。
唉,none 这些可靠的工作。我不能把解决方案归功于我,但如果你来这里寻找有效的答案,请投票给这个。 Lukas Geiter 的原创 post:
我确实更改了 foo/bar 示例,因为真的,谁真正喜欢它?
您必须使用完全限定的类名:
$app->get('/', 'App\Http\Controllers\HomeController@index');
或 将所有路由包装在一个组中(这实际上是 Laravel 5 中的幕后操作)
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'HomeController@index');
$group->get('users', 'UserController@index');
});
对于最终来到这里遇到同样问题的任何其他人。我在新安装的 Lumen 5.2 中删除路由时遇到了同样的问题。
在网上搜索了几个小时后,发现 Lumen 使用的路由控制器与 Laravel 使用的不同。 Lumen 使用 nikic fastroute。
Lumen 路由控制器不支持路由组前缀,即使它列在 Lumen 的文档中。我不知道这是否是原始发布者的问题,因为完整的路线详细信息不可用,但希望它能为其他人节省几个小时。
如果这是一个需要手动 enabled/added 的功能(如果 Lumen 现在支持它,如文档所建议的那样),我无法找到任何参考。也许有人可以阐明这一点?
https://lumen.laravel.com/docs/5.2/routing#route-group-prefixes
我正在使用 全新安装 Lumen(构建网络 API),大部分工作正常,但当我尝试使用路由器来指向 class 我收到此错误:
Fatal error: Class 'App\Http\Controllers\Controller' not found in /Applications/MAMP/htdocs/moments/lumen/app/Http/Controllers/MomentController.php on line 5
这是我在 app/Http/routes 中的 路由器 。php
$app->get('/', 'MomentController@index');
这是我在 app/Http/Controllers/MomentControllerclass。php
<?php namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MomentController extends Controller {
public function index()
{
echo 123;
}
}
我已经在 bootstrap/app 中激活了这些组件。php:
$app->withFacades();
$app->withEloquent();
Dotenv::load(__DIR__.'/../');
这是我的composer.json文件:
{
"name": "laravel/lumen",
"description": "The Laravel Lumen Framework.",
"keywords": ["framework", "laravel", "lumen"],
"license": "MIT",
"type": "project",
"require": {
"laravel/lumen-framework": "5.1.*",
"vlucas/phpdotenv": "~1.0"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"fzaninotto/faker": "~1.0"
},
"autoload": {
"psr-4": {
"App\": "app/"
},
"classmap": [
"database/"
]
},
"autoload-dev": {
"classmap": [
"tests/"
]
},
"config": {
"preferred-install": "dist"
}
}
我认为这与命名空间有关,但我想不通。有什么线索吗?
谢谢,
删除 use App\Http\Controllers\Controller;
,因为不需要那个。
然后检查您的 composer.json 是否为 app
目录启用了 psr-4。
此外,尝试在命令行上使用 composer du
来转储并重新生成自动加载文件。
试试这个
$app->get('/', 'App\Http\Controllers\MomentController@index');
或(更好)将它们分组
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'MomentController@index');
$group->get('foo', 'MomentController@otherAction');
});
并删除 use App\Http\Controllers\Controller;
如@lowerends
解决方案是 link 到正确的基本控制器,以便它可以扩展那个 class。
use Laravel\Lumen\Routing\Controller as BaseController;
这一行是我唯一必须添加的内容才能使其正常工作。
所以完整的class变成了这样:
<?php namespace App\Http\Controllers;
use Laravel\Lumen\Routing\Controller as BaseController;
class ChannelController extends BaseController {
public function getChannels(){}
public function getChannel(){}
}
我想您已经使用 lumen new
而不是 composer create-project laravel/lumen --prefer-dist
创建了一个项目。您可以尝试使用 composer 创建一个新的 lumen 项目并尝试重现此问题。
唉,none 这些可靠的工作。我不能把解决方案归功于我,但如果你来这里寻找有效的答案,请投票给这个。 Lukas Geiter 的原创 post:
我确实更改了 foo/bar 示例,因为真的,谁真正喜欢它?
您必须使用完全限定的类名:
$app->get('/', 'App\Http\Controllers\HomeController@index');
或 将所有路由包装在一个组中(这实际上是 Laravel 5 中的幕后操作)
$app->group(['namespace' => 'App\Http\Controllers'], function($group){
$group->get('/', 'HomeController@index');
$group->get('users', 'UserController@index');
});
对于最终来到这里遇到同样问题的任何其他人。我在新安装的 Lumen 5.2 中删除路由时遇到了同样的问题。
在网上搜索了几个小时后,发现 Lumen 使用的路由控制器与 Laravel 使用的不同。 Lumen 使用 nikic fastroute。
Lumen 路由控制器不支持路由组前缀,即使它列在 Lumen 的文档中。我不知道这是否是原始发布者的问题,因为完整的路线详细信息不可用,但希望它能为其他人节省几个小时。
如果这是一个需要手动 enabled/added 的功能(如果 Lumen 现在支持它,如文档所建议的那样),我无法找到任何参考。也许有人可以阐明这一点?
https://lumen.laravel.com/docs/5.2/routing#route-group-prefixes