在Laravel 4中路由到控制器

时间:2013-12-30 20:32:27

标签: laravel laravel-4

我第一次使用laravel,需要一些帮助来理解路线。我正在设置一个视图,显示客户下达的订单列表。此列表上方是2个搜索框。一个用于按ID搜索,另一个用于选择日期。我想要一个“默认”路线,所以当路线中没有包含id / date时,我们会看到今天到目前为止所有的订单。

路线应如下:

  • 订单 - 应显示今天发出的所有订单。
  • orders / {id} - 应仅显示属于该ID的特定订单。
  • 订单/ {日期} - 应显示在特定日期发出的所有订单。

{id}和{date}应该用正则表达式区分。

我可以让任何一条路线自己工作,但是当我尝试为所有3路线创建路线并相应地修改我的控制器时,我会打破其他路线。一个例子是:

Route::get('orders/{id}', 'OrderController@getOrders')->where('id', '[0-9]+');

这适用于通过ID获取订单,但如果我想允许日期,我将不得不完全改变路线。从那时起,我希望能够更进一步,例如路线订单/ 12345 / edit应该将我带到允许我编辑订单的视图。

如何正确设置我的路线/控制器来执行此操作?

2 个答案:

答案 0 :(得分:1)

除非您设法编写验证日期数值的正则表达式,否则您有两个选择:

  1. 写两条不同的路线:一条验证日期,另一条验证ID。两者都指向控制器中的不同方法。
  2. 使用一条未验证其参数的路由,并指向控制器中的一个方法,其中将检查参数类型的日期或ID。
  3. 我更喜欢第一种选择,因为我相信两种路线都相似但却非常不同。

    修改 如果您想使用相同的表单定位到不同的网址,具体取决于您必须使用javascript的输入内容,您可以使用以下命令更改表单中的操作:

    $('#form').attr('action', "the_url");
    

    你必须为输入设置一个监听器才能知道指向哪个url: Detecting input change in jQuery?

    我希望这可以帮到你!

答案 1 :(得分:1)

只需制作三条路线,例如laravel documentation

订单路线:

Route::get('orders', 'OrderController@getOrders');

按id路由排序:

   Route::get('orders/{id}','OrderController@getOrdersById')->where('id', '[0-9]+');

按数据路线排序:

Route::get('orders/{data}', 'OrderController@getOrdersByData')->where('name', '[A-Za-z]+');

您也可以在OrderController中创建三条路线,例如documentation