首頁 >後端開發 >php教程 >如何實作Laravel路由中不固定數量的參數

如何實作Laravel路由中不固定數量的參數

小云云
小云云原創
2017-12-11 09:07:021988瀏覽

laravel是個好框架,本文將教大家如何實現Laravel路由中不固定數量的參數,文中透過範例程式碼介紹的非常詳細,需要的朋友可以參考借鑒,希望能幫助大家。

... 這三個點是做什麼用的呢?我查了 PHP 的手冊後發現,這個東西叫做可變數量的參數清單。

這個是乾啥用的呢? PHP 手冊是這麼解釋的。

... 是使用者自訂函數中支援可變數量的參數清單。

... 存在於 PHP 5.6 以上的版本。 在 PHP 5.5 及更早版本中,使用函數 func_num_args()func_get_arg() ,且 func_get_args()

可變數量的參數列表,這個概念可能你會覺得很抽象。

我們可以這麼來理解,我們自訂了一個函數或某個 function,但是這個 function 的參數數量是不固定的,這也就是可變數量的參數列表。

關於可變數量的參數列表,讓我們來看兩個範例;

#
<?php
function sum(...$numbers) {
 $acc = 0;
 foreach ($numbers as $n) {
  $acc += $n;
 }
 return $acc;
}
echo sum(1, 2, 3, 4);
?>

以上例程會輸出:

10

可變數量參數將傳遞到function 中,給定的參數變數會作為陣列。

我們再看一個範例:

<?php
function add($a, $b) {
 return $a + $b;
}
echo add(...[1, 2])
?>

以上程式會輸出:

#3

可變數量參數將傳遞到function 中,給定的陣列會作為參數變數。

這個可變數量參數,又和 Laravel 路由有什麼關係呢?

在Laravel 中,我們自訂路由是非常自由的,例如是這樣的:

Route::get(&#39;user/{id}&#39;, &#39;UsersController@filter&#39;);
//路由对应的方法
public function filter($id)
{
 # code...
}

或許有可能這樣的:

Route::get(&#39;user/{id}/{name}&#39;, &#39;UsersController@filter&#39;);
//路由对应的方法
public function filter($id, $name)
{
 # code...
}

#Laravel 路由中這樣不固定數量參數,在程式碼中是如何實現的呢?使用的就是可變數量參數。

// */vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php
/**
 * Dispatch a request to a given controller and method.
 *
 * @param \Illuminate\Routing\Route $route
 * @param mixed $controller
 * @param string $method
 * @return mixed
 */
public function dispatch(Route $route, $controller, $method)
{
 $parameters = $this->resolveClassMethodDependencies(
  $route->parametersWithoutNulls(), $controller, $method
 );
 if (method_exists($controller, &#39;callAction&#39;)) {
  return $controller->callAction($method, $parameters);
 }
 return $controller->{$method}(...array_values($parameters));
}

#不得不讓人佩服 Laravel 作者泰勒腦路清奇!

大家學會了嗎?趕快動手嘗試。

相關建議:

Laravel中資料遷移與資料填充的詳細步驟

Laravel框架效能調優方法

Laravel中關於Blade模板引擎的詳解

以上是如何實作Laravel路由中不固定數量的參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn