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: http://ipnx.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!

Hot AI Tools

Undress AI Tool
Undress images for free

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

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

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

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Common problems and solutions for PHP variable scope include: 1. The global variable cannot be accessed within the function, and it needs to be passed in using the global keyword or parameter; 2. The static variable is declared with static, and it is only initialized once and the value is maintained between multiple calls; 3. Hyperglobal variables such as $_GET and $_POST can be used directly in any scope, but you need to pay attention to safe filtering; 4. Anonymous functions need to introduce parent scope variables through the use keyword, and when modifying external variables, you need to pass a reference. Mastering these rules can help avoid errors and improve code stability.

To safely handle PHP file uploads, you need to verify the source and type, control the file name and path, set server restrictions, and process media files twice. 1. Verify the upload source to prevent CSRF through token and detect the real MIME type through finfo_file using whitelist control; 2. Rename the file to a random string and determine the extension to store it in a non-Web directory according to the detection type; 3. PHP configuration limits the upload size and temporary directory Nginx/Apache prohibits access to the upload directory; 4. The GD library resaves the pictures to clear potential malicious data.

There are three common methods for PHP comment code: 1. Use // or # to block one line of code, and it is recommended to use //; 2. Use /.../ to wrap code blocks with multiple lines, which cannot be nested but can be crossed; 3. Combination skills comments such as using /if(){}/ to control logic blocks, or to improve efficiency with editor shortcut keys, you should pay attention to closing symbols and avoid nesting when using them.

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

The key to writing PHP comments is to clarify the purpose and specifications. Comments should explain "why" rather than "what was done", avoiding redundancy or too simplicity. 1. Use a unified format, such as docblock (/*/) for class and method descriptions to improve readability and tool compatibility; 2. Emphasize the reasons behind the logic, such as why JS jumps need to be output manually; 3. Add an overview description before complex code, describe the process in steps, and help understand the overall idea; 4. Use TODO and FIXME rationally to mark to-do items and problems to facilitate subsequent tracking and collaboration. Good annotations can reduce communication costs and improve code maintenance efficiency.

In PHP, you can use square brackets or curly braces to obtain string specific index characters, but square brackets are recommended; the index starts from 0, and the access outside the range returns a null value and cannot be assigned a value; mb_substr is required to handle multi-byte characters. For example: $str="hello";echo$str[0]; output h; and Chinese characters such as mb_substr($str,1,1) need to obtain the correct result; in actual applications, the length of the string should be checked before looping, dynamic strings need to be verified for validity, and multilingual projects recommend using multi-byte security functions uniformly.

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

TolearnPHPeffectively,startbysettingupalocalserverenvironmentusingtoolslikeXAMPPandacodeeditorlikeVSCode.1)InstallXAMPPforApache,MySQL,andPHP.2)Useacodeeditorforsyntaxsupport.3)TestyoursetupwithasimplePHPfile.Next,learnPHPbasicsincludingvariables,ech
