Home  >  Article  >  Backend Development  >  Related explanations on how to implement an unfixed number of parameters in Laravel routing

Related explanations on how to implement an unfixed number of parameters in Laravel routing

jacklove
jackloveOriginal
2018-07-06 17:43:212016browse

I recently discovered an interesting place when I was learning laravel. I will share it with you below. This article mainly introduces you to the relevant information on how to implement a variable number of parameters in Laravel routing. The article uses sample code. The introduction is very detailed. Friends who need it can refer to it. Let’s take a look together.

Preface

laravel is a good framework. I am also learning and using it, and promoting it in the company. When I was reading the Laravel source code recently, I found a particularly interesting piece of code, please take a look:

... What are these three points used for? I checked the PHP manual and found out that this thing is called a variable number of parameter lists.

What is this used for? The PHP manual explains it this way.

... is a parameter list that supports a variable number of parameters in the user-defined function.

... Exists in PHP 5.6 and above. In PHP 5.5 and earlier, use the functions func_num_args(), func_get_arg() , and func_get_args().

A variable number of parameter lists, this concept may seem abstract to you.

We can understand it this way, we have customized a function or a certain function, but the number of parameters of this function is not fixed, which is a variable number of parameter lists.

Regarding variable number of parameter lists, let’s look at two examples;

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

The above routine Will output:

10

A variable number of parameters will be passed to the function, and the given parameter variables will be used as an array.

Let’s look at another example:

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

The above routine will output:

3

A variable number of parameters will be passed to the function, and the given array will be used as the parameter variable.

What does this variable number of parameters have to do with Laravel routing?

In Laravel, we are very free to customize routing, for example, it looks like this:

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

Maybe it’s like this:

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

How is the unfixed number of parameters in Laravel routing implemented in the code? ? What is used is a variable number of parameters.

// */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));
}

I have to admire Laravel author Taylor for his brilliant mind!

Summary

Articles you may be interested in:

Laravel Framework Tutorial for newbies to blade template

Explanation of code to solve poor quality thumbnails generated by php

implemented by PHP Stack data structure example explanation

#

The above is the detailed content of Related explanations on how to implement an unfixed number of parameters in Laravel routing. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn