流明框架路由不起作用

Posted

技术标签:

【中文标题】流明框架路由不起作用【英文标题】:lumen framework routing not working 【发布时间】:2015-06-23 22:10:07 【问题描述】:

我第一次使用 Lumen 框架,路由 / 到我的 HomeController 不起作用。

这是我的 route.php

$app->get('/', 'HomeController@index');

但我收到以下错误:

[2015-04-17 07:03:41] lumen.ERROR: exception 'ReflectionException' with message 'Class HomeController does not exist' in /Users/refear99/Web/qingsongchou_api/vendor/illuminate/container/Container.php:776

Stack trace:
#0 /Users/refear99/Web/qingsongchou_api/vendor/illuminate/container/Container.php(776): ReflectionClass->__construct('HomeController')
#1 /Users/refear99/Web/qingsongchou_api/vendor/illuminate/container/Container.php(656): Illuminate\Container\Container->build('HomeController', Array)
#2 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(358): Illuminate\Container\Container->make('HomeController', Array)
#3 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1184): Laravel\Lumen\Application->make('HomeController')
#4 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1157): Laravel\Lumen\Application->callControllerAction(Array)
#5 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1142): Laravel\Lumen\Application->callActionOnArrayBasedRoute(Array)
#6 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1120): Laravel\Lumen\Application->handleArrayBasedFoundRoute(Array)
#7 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1058): Laravel\Lumen\Application->handleFoundRoute(Array)
#8 /Users/refear99/Web/qingsongchou_api/vendor/laravel/lumen-framework/src/Application.php(1006): Laravel\Lumen\Application->dispatch(NULL)
#9 /Users/refear99/Web/qingsongchou_api/public/index.php(28): Laravel\Lumen\Application->run()
#10 main  

这是我在 /app/Http/Controllers/ 中的 HomeController.php

<?php namespace App\Http\Controllers;

class HomeController extends Controller 

public function index()

    echo 123;



可能是什么问题?

【问题讨论】:

你的控制器文件中有namespace App\Http\Controllers;吗? @lukasgeiter 是的,命名空间 App\Http\Controllers;在 HomeController.php 供您参考,这个链接有很好的关于lumen安装和创建新的REST api的教程wsnippets.com/… 【参考方案1】:

它现在似乎没有记录,但您需要使用控制器的完整命名空间路径。

所以你的路线应该是这样的:

$app->get('/', 'App\Http\Controllers\HomeController@index');

区别在于Laravel自带的RouteServiceProvider,可以在app/Providers/RouteServiceProvider.php中找到,查看map方法,如下所示

$router->group(['namespace' => $this->namespace], function($router)

    require app_path('Http/routes.php');
);

因此,您的所有应用程序路由实际上都分组在一个默认命名空间下,通常是 App\Http\Controllers。

希望有帮助!

【讨论】:

【参考方案2】:

您必须使用完全限定的类名:

$app->get('/', 'App\Http\Controllers\HomeController@index');

将所有路由包装在一个组中(这实际上是在 Laravel 5 的底层实现的)

$app->group(['namespace' => 'App\Http\Controllers'], function($group)

    $group->get('/', 'HomeController@index');
    $group->get('foo', 'FooController@index');

);

【讨论】:

如果 Lumen 在其官方文档中的任何地方都指定了这一点,那就太好了。 这很奇怪,因为如果您查看 github.com/laravel/lumen/blob/master/bootstrap/app.php#L97 已经有命名空间选项,但它不起作用 - 嘿等等它起作用但在嵌套组中不起作用:( 说完全相反的文档有点令人困惑。 lumen.laravel.com/docs/5.2/controllers#basic-controllers @Helliax 这个答案在我写的时候绝对是正确的(Lumen 5.0)。很可能在较新的版本之一中已对此进行了更改。我现在没有时间尝试,但如果有人可以确认它确实发生了变化,我将更新我的答案。 @lukasgeiter 您的回答仍然正确。我的评论更符合 skcin7。文档说的与实际有效的相反是没有意义的。【参考方案3】:

查看文件/bootstrap/app.php 可以进行一些设置。此外,在文件的底部,您会找到以下几行。

$app->group(['namespace' => 'App\Http\Controllers'], function ($app) 
    require __DIR__.'/../app/Http/routes.php';
);

return $app;

应该使用正确的命名空间为您的调用提供服务。

您也可以在此处激活 .env 设置 :)

看看这个帖子https://mattstauffer.co/blog/introducing-lumen-from-laravel

希望这对某人有所帮助! :)

【讨论】:

以上是关于流明框架路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel(流明)上使用 Mockery 模拟 Eloquent 模型不起作用

Zend 框架为啥这个带有西班牙字符的 url 不起作用?

使用 Laravel 路由获取 404 - 重写不起作用

asp.net webapi 2属性路由不起作用

Laravel Admin 路由不起作用,但其他路由不起作用

角度简单路由不起作用