1
  1. 我的路线.php

    Route::get('course/{id}', 'CourseController@show');
    
    Route::get('course/{id}/{comment_type}', 'CourseController@show');
    
    Route::get('course/search/{key_word}', 'CourseController@search');
    
  2. 我的 CourseController.php 有这些方法

    public function show($id,$comment_type=1)
    {
      //do something
    }
    
    public function search($key_word)
    {
     //do something
    }
    
  3. 我想进入search方法。但每次我调用

    course/search/{key_word} //search method in CourseCOntroller
    

    它进入

    course/{id}/{comment_type} //show method in CourseCOntroller
    
  4. 我调试源代码。我发现UrlMatcher有一个matchCollection函数,我找到了原因,laravel生成错误Regular Expression 当我调用course/search/{key_word}时,它会生成这样的正则表达式?

    #^/course/(?P<id>[^/]++)/(?P<comment_type>[^/]++)$#s
    
  5. 我不知道这个正则表达式是如何产生的。

  6. 我该如何解决这个问题,search当我调用 course/search/{key_word}.

4

1 回答 1

2

更改路线的顺序:

<?php
Route::get('course/search/{key_word}', 'CourseController@search');
Route::get('course/{id}/{comment_type}', 'CourseController@show');
Route::get('course/{id}', 'CourseController@show');

因为 {id} 是一个通配符,它​​会选择每条路由。

请参阅http://laravel.com/docs/routing#route-parameters -> '正则表达式路由约束'或路由模型绑定 @ http://laravel.com/docs/routing#route-model-binding

于 2013-09-27T09:26:38.647 回答