【问题标题】:Specify controller & method to use in anonymous function of a route parameter?指定要在路由参数的匿名函数中使用的控制器和方法?
【发布时间】:2015-10-07 21:48:03
【问题描述】:

我正在检查 Laravel。尝试使用通配符路由。第二个参数是一个匿名函数。理想情况下,我想做一些验证以确定它是否是有效的通配符选项,然后指定要使用的控制器和方法。

Route::get('lodging/{entrance}', function($entrance){
    // validate if entrance is 'north','south','east','west'
    // send to controller & specific method
    return "entrance is $entrance";
});

这是一个合适的地方吗?

或者是否应该只在控制器中处理此验证并将此格式用于路由:

Route::get('lodging/{entrance}', 'Lodging@chooseEntrance');

【问题讨论】:

  • 这听起来有点奇怪。您能否详细说明为什么需要根据 entrance 路由参数的值路由到不同的控制器方法?
  • @Bogdan,我有 4 个不同的入口。我只是想找到一种方法来使用通配符来减少我必须做的路线数量。其他子目录将有更多的路线。每个入口都会调用不同的模型方法。
  • 这个想法是,如果只有某些路由是有效的,那么最好让路由文件验证这一点,而不是让控制器来做。

标签: laravel laravel-5 laravel-routing


【解决方案1】:
Route::get('lodging/{entrance}', function($entrance){ 
    $app = app();
      $controller = $app->make('ExampleController');
    if($entrance=="north"){
      return $controller->callAction('index', $parameters = array());
    }else{
      return $controller->callAction2('index', $parameters = array());
    }

})->name('lodging');

希望它对某人有所帮助。

【讨论】:

    【解决方案2】:

    您可以为您的路线添加简单的验证

    Route::get('lodging/{entrance}', function(){ ... })->where('entrance', 'north|south|east|west');
    

    Routing#parameters-regular-expression-constraints

    【讨论】:

    • 这显示了如何验证通配符。但是,它并没有告诉我如何分配要使用的控制器和方法。
    • 好吧,在您的代码中,您的匿名函数控制器。
    • 我确实喜欢这种限制路线的方法。我没有在文档中查看过该选项。
    • 认真的吗?我应该把控制器逻辑放在那里?这似乎是一个可怕的想法。可以看出,在进行一些代码维护时会很痛苦。
    • 你说得对,最好分配一个真正的控制器,但它是一个很好的功能,可以将一些东西组合在一起进行调试。顺便说一句,要进一步限制您的路线,而不仅仅是普通的正则表达式,您应该查看 Middlewares
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多