1
  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ことがわかり、その理由がわかりました。 laravelRegular 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 -> 'Regular Expression Route Constraints' または Route model binding @ http://laravel.com/docs/routing#route-model-bindingを参照してください。

于 2013-09-27T09:26:38.647 に答える