簡體   English   中英

如何在Laravel路由中使用可選值?

[英]How to use optional values in Laravel routes?

我有以下路線:

Route::get('users/search/{type?}/{value}', 'Site\UserController@search');

主要思想是簡化搜索:

如果類型存在(姓名,姓氏,電子郵件等),則僅按該字段搜索。
如果不是-隨處搜索。

但是當我這樣做時:

http://example.com/users/search/sdgfdfxg 

Laravel拋出

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException 

http://example.com/users/search/name/sdgfdfxg

要么

http://example.com/users/search/surname/sdgfdfxg

一切順利。

Yust定義2條路線:

Route::get('users/search/{type}/{value}',function($type,$value){
    $app = app();
    $controller = $app->make('Site\UserController');
    $controller->callAction($app, $app['router'], 'search', $parameters = array($type,$value));
});
Route::get('users/search/{value}',function($value){
    $app = app();
    $controller = $app->make('Site\UserController');
    $controller->callAction($app, $app['router'], 'search', $parameters = array(null,$value));
});

但是,最簡單的選擇仍然是更改定義參數的順序。 將可選選項設置為url的末尾:

Route::get('users/search/{value}/{type?}','Site\UserController@search');

您可以注冊2條路線。 一種帶有“類型”,一種沒有處理兩種情況。

Route::get('users/search/{type}/{value}', 'Site\UserController@searchByType');
Route::get('users/search/{value}', 'Site\UserController@search');

首先,您永遠不能將可選參數放在第一位。 可選參數始終是函數或URL中的最后一個。

根據文檔,您必須在其旁邊放置一個問號,如下所示:

Route::get('users/search/{value}/{type?}', 'Site\UserController@search');

並在您的搜索功能中:

public function search($value, $type = null) {
    // Handle your code here...
}

我知道先有一個值,然后是類型的URL似乎很奇怪。如果您對此感到不滿意,建議您使用Peh的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM