2

Lumen のルーティングに問題があります。ルートで正規表現を使用して uri をキャプチャしようとしています。

キャプチャしたデータをコントローラー メソッドに渡そうとすると、変数は空ですが、クロージャーを使用して同じことを行うと、変数は期待どおりに表示されます。コードは次のとおりです。

これは機能します:

$app->get('{categoryUrlPath:[a-zA-Z0-9\-\/]+}', function($categoryUrlPath) {
  echo $categoryUrlPath;
});

これは機能しません:

$app->get('{categoryUrlPath:[a-zA-Z0-9\-\/]+}', ['uses' => 'App\Http\Controllers\FrontController@showSearch']);

そしてコントローラー内:

public function showSearch($categoryUrlPath) {
    return $categoryUrlPath;    
}

コントローラの showSearch メソッドのデバッグ

print_r(app('request')->route());

変数が存在することを示しています。

Array ( [0] => 1 [1] => Array ( [uses] => App\Http\Controllers\FrontController@showSearch ) [2] => Array ( [categoryUrlPath] => this/is/a/captured/uri ) ) 

しかし、それでも $categoryUrlPath として渡されません

助けていただければ幸いです-私は困惑しています。また、URIだけをキャプチャする他の(より簡単な)方法があることは理解していますが、この方法でそれを行う特定の理由があり、さらに、ここでルーターで何が間違っているのかを理解したい.

ありがとう!

4

1 に答える 1

0

Type hinting on a controller method will make your variable "go empty". Simply don't type hint. Your closure approach doesn't have the type hint, but your controller method does.

于 2015-05-01T10:36:32.117 に答える