Laravel 5 自定义模块路由不工作

Laravel 5 custom module routes not working

我正在为我的项目创建自定义模块,以便能够根据要求向一个或另一个项目添加一些功能。

我的问题是路由,我在 ModuleServiceProvider 中加载路由 app.php:

include __DIR__.'/../../modules/canae/Http/routes.php';

我检查了这是否适用于该文件中的回显。 routes.php 文件包含以下代码:

Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function() {
    Route::controller('dogs', 'Canae\Http\Controllers\Admin\DogController');
});

我也检查了Laravel可以找到Controller,问题是无法执行里面的代码

这是我在 DogController 中的代码:

<?php namespace Canae\Http\Controllers\Admin;

class DogController extends \Origin\Http\Controllers\Controller {
    public function getIndex() {
        echo "Hello!";die();
    }
}

错误是Controller method not found.

如果我将下面的extends修改为Origin\Http\Controllers\Controller(去掉第一个\)我得到如下错误:Class 'Canae\Http\Controllers\Admin\Origin\Http\Controllers\Controller' not found所以我的结论是里面的代码该控制器正在执行,至少从 Laravel.

读取

我也在尝试用这条路线实现索引功能http://localhost/canae/public/admin/dogs/index

这是执行php artisan route:list的尾部结果:

|        | GET|HEAD                       | admin/dogs/index/{one?}/{two?}/{three?}/{four?}/{five?}                       |        | Canae\Http\Controllers\Admin\DogController@getIndex                | auth       |
|        | GET|HEAD                       | admin/dogs                                                                    |        | Canae\Http\Controllers\Admin\DogController@getIndex                | auth       |
|        | GET|HEAD|POST|PUT|PATCH|DELETE | admin/dogs/{_missing}                                                         |        | Canae\Http\Controllers\Admin\DogController@missingMethod           | auth       |
+--------+--------------------------------+-------------------------------------------------------------------------------+--------+--------------------------------------------------------------------+------------+

如果您需要更多信息,请告诉我。感谢您的宝贵时间。

根据文档:http://laravel.com/docs/master/controllers

您是否尝试过使用 "use" 语句?您的代码将如下所示:

<?php 

namespace Canae\Http\Controllers\Admin;

use Canae\Http\Controllers\Controller;

class DogController extends Controller {
    public function getIndex() {
        echo "Hello!";die();
    }
}

我也不确定为什么您的命名空间是 "Canae\Http\Controllers\Admin",因为示例仅显示 "App\Http\Controllers"。我不熟悉您项目的具体结构,但删除“\Admin”可能也会有所帮助。

我解决了它移动 providers 内的行,将此路由加载到 providers 数组的第一项,甚至在应用程序之前。不知道为什么,但现在可以了。