Table of Contents
1、 路由模型绑定的基本使用
2、隐式路由模型绑定
3、路由模型绑定的一些特性
Home Backend Development PHP Tutorial Laravel 5.2 新特性系列 -- 隐式路由模型绑定功能实现

Laravel 5.2 新特性系列 -- 隐式路由模型绑定功能实现

Jun 23, 2016 pm 01:15 PM

Laravel5.1 中已经提供了路由模型绑定功能,而在 Laravel5.2中,这一功能实现变得更加简单。

1、 路由模型绑定的基本使用

通常我们在URL路由中通过如下方式绑定模型:

Route::group(['middleware' => ['web']], function () {    Route::get('/user/{id}',function($id){        $user = \App\User::findOrFail($id);        dd($user);    });});
Copy after login

我一般也是这么实现的,但是如果有一种途径可以去掉 findOrFail这一行而直接获取 $user实例岂不是更好?实际上, 在Laravel中确实可是实现这一目的,在路由的服务提供者 RouteServiceProvider中的 boot方法里面添加如下这行代码:

public function boot(Router $router){    $router->model('user',User::class);    parent::boot($router);}
Copy after login

这意味着无论何时只要路由中包含参数 user,其ID值都对应一个 App\User实例,这种机制允许我们重写上述代码如下:

Route::group(['middleware' => ['web']], function () {    Route::get('/user/{user}',function($user){        dd($user);    });});
Copy after login

2、隐式路由模型绑定

在Laravel 5.2中,使用路由模型绑定更加简单,只需要在路由闭包(或控制器方法)中类型声明参数并且将该参数保持和路由参数一致即可,这样该参数被自动被当作路由模型绑定进行处理(不再需要在 RouteServiceProvider中调用 model方法声明绑定关系):

Route::group(['middleware' => ['web']], function () {    Route::get('/user/{user}',function(\App\User $user){        dd($user);    });});
Copy after login

打印结果和之前一模一样。

3、路由模型绑定的一些特性

3.1 自定义路由模型绑定逻辑

如果你想要自定义路由模型绑定逻辑以返回所需要的实例,可以传递一个闭包而不是类名作为显式绑定(相对隐式模型绑定,需要在 RouteServiceProvider的 boot方法中定义绑定关系叫做显式绑定)的第二个参数:

public function boot(Router $router){    $router->bind('user',function($value){        return User::where('name',$value)->where('status',1)->first();    });    parent::boot($router);}
Copy after login

3.2 自定义路由模型绑定异常

你还可以通过传递一个闭包作为第三个参数来自定义路由模型绑定抛出的异常(比如找不到对应模型实例时):

public function boot(Router $router){    $router->bind('user',User::class,function(){        throw new NotFoundHttpException;    });    parent::boot($router);}
Copy after login

3.3 修改Eloquent模型的“路由键”

默认情况下,Laravel使用URL片段中的 id字段进行Eloquent模型匹配,但是如果你想要自定义这个字段,恰如上面自定义路由模型绑定一样,该怎么实现呢?

Eloquent 实现了 Illuminate\Contracts\Routing\UrlRoutable接口,这意味着Eloquent对象有一个 getRouteKeyName()方法,在该方法中可以定义在URL中使用哪个字段来匹配模型实例,默认是 id,你可以在任意Eloquent模型中重写它:

class User extends Model {    public function getRouteKeyName()    {        return 'name';    }}
Copy after login

现在,你可以使用显式或隐式路由模型绑定,而且可以自定义URL片段中的匹配字段。

Statement of this Website
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How to debug CLI mode in PHPStorm? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

Framework Security Features: Protecting against vulnerabilities. Framework Security Features: Protecting against vulnerabilities. Mar 28, 2025 pm 05:11 PM

Article discusses essential security features in frameworks to protect against vulnerabilities, including input validation, authentication, and regular updates.

See all articles