laravel 4无法进入指定控制器方法

时间:2013-09-27 09:21:09

标签: php regex laravel laravel-4

  1. 我的routes.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}方法。

1 个答案:

答案 0 :(得分: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 - &gt; '正则表达式路径约束' 或路线模型绑定@ http://laravel.com/docs/routing#route-model-binding