【问题标题】:How can I organize laravel routes without repeating controller and functions?如何在不重复控制器和功能的情况下组织 laravel 路由?
【发布时间】:2018-11-15 22:14:07
【问题描述】:

我有这段代码,但它非常冗长。我怎样才能写得更短?

Route::get('/transaction/index', 'TransacaoController@index');
Route::get('/transaction/test1', 'TransacaoController@test1');
Route::get('/transaction/test2', 'TransacaoController@test2');
Route::get('/transaction/test3', 'TransacaoController@test3');
Route::get('/transaction/test4', 'TransacaoController@test4');

【问题讨论】:

  • 你能添加更多解释吗?比如你的每条路线会做什么?结果应该是什么样子?

标签: php laravel web controller routes


【解决方案1】:

不确定您是否在谈论 Laravel 中的路由前缀。

路由前缀 prefix 方法可用于为组中的每个路由添加给定 URI 的前缀。例如,您可能希望在组内的所有路由 URI 前加上 admin:

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // Matches The "/admin/users" URL
    });
});

摘自https://laravel.com/docs/5.7/routing

【讨论】:

    【解决方案2】:

    这可能取决于您喜欢如何组织基础架构。少写并不总是秩序的同义词。

    您可以使用group() 将中间件或前缀应用于您的路由:

    Route::group(['middleware' => ['custom'], 'prefix' => 'transaction'], function(){
        Route::get('/index', 'TransacaoController@index');
        Route::get('/test1', 'TransacaoController@test1');
        Route::get('/test2', 'TransacaoController@test2');
        Route::get('/test3', 'TransacaoController@test3');
        Route::get('/test4', 'TransacaoController@test4');
    });
    

    现在,还有另一种选择(不推荐)。您可以使用独特的路线在控制器级别分离您的逻辑:

    Route::get('/transaction/{action}', 'TransacaoController@action');
    
    function action($action){
        if ($action == 'index'){
             // ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-09
      • 2020-11-05
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      相关资源
      最近更新 更多