Laravel routing component: Simplify and efficient routing management
This article discusses Laravel's powerful routing component, which provides simple and efficient routing management methods, and supports simple URLs, parameters, groups, naming, and event protection of routing groups. Its routing model binding function simplifies the processing of repetitive tasks by prompting the model name rather than ID parameters.
Core points:
- Laravel's routing component provides simple and efficient routing management methods, supporting simple URLs, parameters, groups, naming, and event protection routing groups. The routing model binding function simplifies repetitive task processing by prompting the model name rather than the ID parameters.
- Laravel's routing model binding will automatically parse the model using ID parameters, and throw an exception if the model does not exist. The
App\Exceptions\Handler@render
method is responsible for converting the exception to an HTTP response and can be used to processModelNotFoundException
and redirect to a 404 page. - Laravel allows custom routing model binding, such as rewriting the
getRouteKeyName
method of the parent model class to use different attribute names, such as UUID. This helps avoid exposing internal IDs to the end user.
Example: Manage backend category
Suppose there are a series of categories in the database that administrators can manage in the background. The routing file is as follows:
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () { Route::resource('categories', 'CategoriesController'); });The
CategoriesController
class contains seven resource methods. In the edit
operation, you need to check whether the category to be edited exists in the database, otherwise an error message will be returned and redirected:
public function edit($id) { $category = Category::find($id); if (!$category) { return redirect()->route('admin.categories.index')->withErrors([trans('errors.category_not_found')]); } // ... }
Routing model binding
This is a common practice, but Laravel provides a more optimized way - routing model binding. Just type prompts the model name, no ID parameters are required.
The available route list is as follows:
<code>+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+ | | GET|HEAD | admin/categories | admin.categories.index | App\Http\Controllers\Admin\CategoriesController@index | web,admin | | | POST | admin/categories | admin.categories.store | App\Http\Controllers\Admin\CategoriesController@store | web,admin | | | GET|HEAD | admin/categories/create | admin.categories.create | App\Http\Controllers\Admin\CategoriesController@create | web,admin | | | GET|HEAD | admin/categories/{categories} | admin.categories.show | App\Http\Controllers\Admin\CategoriesController@show | web,admin | | | PUT|PATCH | admin/categories/{categories} | admin.categories.update | App\Http\Controllers\Admin\CategoriesController@update | web,admin | | | DELETE | admin/categories/{categories} | admin.categories.destroy | App\Http\Controllers\Admin\CategoriesController@destroy | web,admin | | | GET|HEAD | admin/categories/{categories}/edit | admin.categories.edit | App\Http\Controllers\Admin\CategoriesController@edit | web,admin |</code>
Routing parameters are {categories}
, which can be modified as needed. Laravel provides an option to modify it:
Route::resource('categories', 'CategoriesController', [ 'parameters' => 'singular', ]);
Modified route:
<code>+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+ | | GET|HEAD | admin/categories | admin.categories.index | App\Http\Controllers\Admin\CategoriesController@index | web,admin | | | POST | admin/categories | admin.categories.store | App\Http\Controllers\Admin\CategoriesController@store | web,admin | | | GET|HEAD | admin/categories/create | admin.categories.create | App\Http\Controllers\Admin\CategoriesController@create | web,admin | | | GET|HEAD | admin/categories/{category} | admin.categories.show | App\Http\Controllers\Admin\CategoriesController@show | web,admin | | | PUT|PATCH | admin/categories/{category} | admin.categories.update | App\Http\Controllers\Admin\CategoriesController@update | web,admin | | | DELETE | admin/categories/{category} | admin.categories.destroy | App\Http\Controllers\Admin\CategoriesController@destroy | web,admin | | | GET|HEAD | admin/categories/{category}/edit | admin.categories.edit | App\Http\Controllers\Admin\CategoriesController@edit | web,admin |</code>
Note: Laravel 5.3 uses the singular form by default.
public function edit(Category $category) { return view('admin.categories.edit', [ 'category' => $category ]); }
Laravel will now automatically parse the category with the ID parameter, throwing an exception if the model does not exist.
Note: Unless the parameter has a default value, it uses the findOrFail
Eloquent method to parse the parameters.
Exception handling
TheApp\Exceptions\Handler@render
method is responsible for converting exceptions into HTTP responses. We will use it to handle ModelNotFoundException
and redirect to the 404 page.
This method has the request
and exception
parameters, which can be used to determine the action to perform.
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () { Route::resource('categories', 'CategoriesController'); });
We test whether the thrown exception is an instance of ModelNotFoundException
. We can also test the model name to display the correct error message. To avoid adding multiple if
tests to all models, we can create an array of indexed messages and use the model class name to extract the correct messages.
Parameter analysis
Laravel uses name and type hints to resolve routing parameters. If the parameter type is a model, it tries to look up records in the database using ID, and fails if the record cannot be found.
Custom routing key
To avoid exposing internal IDs to end users, UUIDs are usually used. But since Laravel uses table primary keys to parse bound parameters, an error is always thrown!
To do this, Laravel allows us to rewrite the getRouteKeyName
method of the parent model class. This method should return the property name, in this case, UUID.
public function edit($id) { $category = Category::find($id); if (!$category) { return redirect()->route('admin.categories.index')->withErrors([trans('errors.category_not_found')]); } // ... }
Now if we try to edit a specific category with UUID, it should work as expected, for example: https://www.php.cn/link/604541b9b9f266538ed001ea49fcc956.
FAQs on Laravel routing model binding (This part of the content has been answered in detail in the original text and will not be described here)
I hope the above content will be helpful to you!
The above is the detailed content of Laravel Quick Tip: Model Route Binding. For more information, please follow other related articles on the PHP Chinese website!

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

PHP and Python are both high-level programming languages that are widely used in web development, data processing and automation tasks. 1.PHP is often used to build dynamic websites and content management systems, while Python is often used to build web frameworks and data science. 2.PHP uses echo to output content, Python uses print. 3. Both support object-oriented programming, but the syntax and keywords are different. 4. PHP supports weak type conversion, while Python is more stringent. 5. PHP performance optimization includes using OPcache and asynchronous programming, while Python uses cProfile and asynchronous programming.

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP remains important in the modernization process because it supports a large number of websites and applications and adapts to development needs through frameworks. 1.PHP7 improves performance and introduces new features. 2. Modern frameworks such as Laravel, Symfony and CodeIgniter simplify development and improve code quality. 3. Performance optimization and best practices further improve application efficiency.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Zend Studio 13.0.1
Powerful PHP integrated development environment

WebStorm Mac version
Useful JavaScript development tools

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.