【问题标题】:Laravel 5 custom module routes not workingLaravel 5 自定义模块路由不起作用
【发布时间】:2015-02-18 20:35:53
【问题描述】:

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

我的问题在于路由,我将路由加载到 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       |
+--------+--------------------------------+-------------------------------------------------------------------------------+--------+--------------------------------------------------------------------+------------+

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

【问题讨论】:

  • 尝试使用明确的测试路线:Route::get('test', 'Canae\Http\Controllers\Admin\DogController@getIndex') 并转到http://localhost/canae/public/admin/test
  • @lukasgeiter 同样的错误这样做:(
  • 尝试快速运行php artisan route:clear 以确保没有缓存任何内容。

标签: php routing laravel-5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    根据以下文档: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”可能也有帮助。

    【讨论】:

    • 是的,我也试过了,app 目录有命名空间 Origin,modules/canae 有命名空间 Canae,只是为了创建一个模块化的应用程序。我在这个帖子中回答时解决了这个问题,不知道为什么,但它有效。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2019-12-10
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多