Laravel 5自定义模块路由不起作用

时间:2015-02-18 20:35:53

标签: php routing laravel-5

我为我的项目创建自定义模块,以便能够根据需要为项目或其他项目添加一些功能。

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

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       |
+--------+--------------------------------+-------------------------------------------------------------------------------+--------+--------------------------------------------------------------------+------------+

告诉我您是否需要更多信息。谢谢你的时间。

2 个答案:

答案 0 :(得分:2)

我解决了它将providers内部的行移动到providers数组的第一项,甚至在应用程序之前。不知道为什么,但现在它正在发挥作用。

答案 1 :(得分:0)

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

中的文档

您是否尝试过使用“使用”声明?您的代码将如下所示:

<?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”也可能有所帮助。