2013-09-27 44 views
1
  1. 我routes.php文件laravel 4不能進入指定控制器方法

    Route::get('course/{id}', '[email protected]'); 
    
    Route::get('course/{id}/{comment_type}', '[email protected]'); 
    
    Route::get('course/search/{key_word}', '[email protected]'); 
    
  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. 我該如何解決這個問題,當我調用course/search/{key_word}時,它會調用search方法。

回答

2

改變你的路由的順序:

<?php 
Route::get('course/search/{key_word}', '[email protected]'); 
Route::get('course/{id}/{comment_type}', '[email protected]'); 
Route::get('course/{id}', '[email protected]'); 

因爲{ID}是一個通配符,它​​會拿起每路線。

http://laravel.com/docs/routing#route-parameters - >「正則表達式路由約束」 或路由模型綁定@http://laravel.com/docs/routing#route-model-binding

+0

感謝的人,我只是覺得L4可以做的更靈活:) – diligent

+0

嗯,這是。與 - > where()在自定義路由綁定中,您可以按照您喜歡的方式將其扭曲;) –