【问题标题】:laravel routing based on conventionlaravel 基于约定的路由
【发布时间】:2017-03-12 23:06:19
【问题描述】:

我正在尝试根据约定设置一个简单的路由系统。 我的应用将具有这种结构

Http
--Controllers
----Admin
------User.php
----Books
------Add.php
----etc...

我希望能够添加新文件夹和控制器,而无需手动将路由添加到 web.php 文件。 例如,我希望路由使用 User.php 控制器响应 /Admin/User URL。

我正在尝试这样的事情,但我不明白如何编写内部路由器......

Route::any('/{module}/{action?}', function($module, $action = 'index') {
    Route::get('*',$module.'\'.$action.'@index' );
});

似乎 Rout:get('*'... 从不匹配。

PS 控制器命名空间是正确的,我用 composer 重新加载。 如果调用 harcoded,控制器就会工作。

我也试图逃避'\'

$r=$module.'\\'.$action.'\\'.$action.'Ctl@index';
Route::get('/',$r );

但没有结果。路线被拦截,但我没有提供任何服务

【问题讨论】:

    标签: laravel routing


    【解决方案1】:

    看来我想出了这个

    Route::get('/{module}/{action}', function($module,$action) {
    
      return App::make('\App\Http\Controllers\\'
                       .$module.'\\'.$action)->callAction('index', []);
    
      });
    

    还有其他更好的方法吗?

    【讨论】:

    • 请注意,这种做法很难处理,也很难维护。您应该使用硬编码控制器编写路由。
    • @Ole,这就是我想听到的评论,但为什么会这样呢?从我的角度来看,我节省了时间和维护,我不必再接触路线了!
    • 因为您必须通过查找源代码结构在视图中生成 URL,并且无论出于何种原因更改源代码时都必须更改所有 URL。
    • @Ole,嗯,我真的不明白你的意思。我正在寻找一种“基于约定”的结构,其中所有控制器都在 /module-name/controllername 中,如果我想要一个新的 URL 路径,我不想手动添加路由
    猜你喜欢
    • 2014-02-12
    • 2017-11-20
    • 1970-01-01
    • 2020-03-07
    • 2016-01-09
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多