当前位置: 首页 > 后端技术 > PHP

LaravelFramework路由基础

时间:2023-03-29 23:37:16 PHP

What部分路由的概念(定义)和作用注:Laravel路由仅指Web中的后端路由。概念:Laravel中的路由是指从外部世界访问Laravel应用程序。作用:定义外部访问Laravel应用的资源或逻辑处理器的匹配规则。也就是说,通过路由,我们可以通过匹配路由的请求方法1和URI2来访问相应的资源或处理程序。Laravel各版本路由配置的一些差异版本默认路由文件>=5.3routes/web.app~5.1,~5.2app/Http/routes.php前面的部分怎么写不要把逻辑代码写在路由里,请将逻辑代码放在控制器中处理路由缓存不适用于基于闭包的路由。千万不要在路由配置文件中写“关闭路由”或其他业务逻辑代码,因为一旦使用,路由缓存将不可用。路由器要保持整洁,不要放置路由配置以外的其他程序逻辑。首选Restful路由(即资源路由)。路由的组成和分类构成了Laravel路由的三个核心部分:请求方法(Method)、URI、处理方法(Action)。按照Action可以分为:基本路由和controller路由。//基本路由。只是一个URI和一个闭包函数Route::get('index',function(){return'helloworld';});//控制器路由。只有一个URI和一个控制器接口//Way1Route::get('users','App\Http\Controllers\UsersController@index');//Way2Route::get('users',['App\Http\Controllers\UsersController','index']);//写法3useApp\Http\Controllers\UsersControllerRoute::get('users',[UsersController::class,'index']);//写法四Route::namespace('App\Http\Controllers')->group(function(){Route::get('users','UsersController@index');});按照Method可以分为:基本路由(同上)、视图路由、重定向路由、回退路由、资源路由。//查看路由Route::view('index',//uri,required'index',//视图名称,required['name'=>'jack','gender'=>'male'],//parameter,optional);//重定向路由Route::redirect('welcome','index');//回退路由Route::fallback(function(){abort(404);});//资源路由Route::resource('用户',UsersController::class);资源路由使用phpartisanroute:list查看注册的路由。Route::resource('用户',UsersController::class);上面的资源路由代码是资源路由的一般定义。相当于定义了以下7条路由://1.获取所有用户数据。相当于访问列表页面Route::get('/users','UsersController@index')->name('users.index');//2.访问用户的新页面Route::get('/users/create','UsersController@create')->name('users.create');//3.新用户的逻辑处理Route::post('/users','UsersController@store')->name('users.store');//4.访问用户详情展示页面Route::get('/users/{user}','UsersController@show')->name('users.show');//5.访问用户详情编辑页面Route::get('/users/{user}/edit','UsersController@edit')->name('user.edit');//6.更新用户逻辑处理Route::put('/users/{user}','UsersController@update')->name('users.update');//7.删除用户的逻辑处理Route::delete('/users/{user}','UsersController@destroy')->name('users.destroy');在使用resource方法时,如果只使用部分路由,必须使用only列出所有可用路由,千万不要使用except,因为only相当于Whitelist比except更直观。使用白名单路由有利于养成“安全习惯”:Route::resource('photos','PhotosController',['only'=>['index','show']]);路由参数路由参数通常放在{}里面,参数名只能是字母,路由参数不能包含-符号。如有必要,请使用下划线_代替。路由参数将依次注入路由回调或控制器,而不管回调或控制器的参数名称。//必需参数Route::get('users/{id}',function($id){return'userid:'.$id;});//可选参数。可选参数必须有默认值。Route::get('users/{id}/{name?}',function($id,$name){return'userid:'.$id.",username:".$name;});路由命名路由命名是为特定路由生成URL或重定向的便捷方式。//方式1Route::get('users/{id}',function($id){return'userid:'.$id;})->name('userInfo');//方式2Route::get('users/{id}/{name?}',['as'=>'userInfo',function($id){return'userid:'.$id;}]);routinggroup路由组允许内部路由共享相同的路由属性(中间件、子域名、命名空间、路由前缀、路由名称前缀)。routing属性中的中间件将中间件分配给路由组中的所有路由,中间件会在数组中按它们排序。命令运行。//方式一Route::middleware(['web','auth'])->group(function(){});//方式二Route::group(['middleware'=>['web','auth']],函数(){});路由属性的子域名//方式1Route::domain('test.myapp.com')->group(function(){});//方式2Route::group(['domain'=>'test.myapp.com'],function(){});路由属性的命名空间//写法Route::namespace('App\Http\Controllers')->group(function(){});//方式2Route::group(['namespace'=>'App\Http\Controllers'],function(){});路由属性的路由前缀//方式一Route::prefix('admin')->group(function(){});//方式二Route::group(['prefix'=>'admin'],function(){});路由属性的路由Nameprefix//Way1Route::name('admin.')->group(function(){});//Way2Route::group(['as'=>'admin.'],function(){});//方式3Route::group(['name_prefix'=>'admin.'],function(){});路由模型绑定在路由或控制器行为中注入模型ID时(默认为"id"字段,可以重写Eloquent模型中的getRouteKeyName()方法使用其他字段),Laravel提供了直接自动注入模型的方法将此ID匹配到路由中的实例。隐式绑定Laravel将自动解析在路由或控制器中定义的模型,其路由段名称与类型提示变量名称匹配。Route::get('users/{user}',function(APP\Models\User$user){});显式绑定要注册显式绑定,请使用路由器的模型方法为给定参数指定类。在RouteServiceProvider类的引导方法中定义这些显式模型绑定。公共功能启动(){父级::启动();Route::model('user',App\User::class);}如果要定义模型绑定的解析逻辑,可以在boot方法中使用Route::bind方法。公共功能启动(){父级::启动();Route::bind('user',function($value){returnApp\User::where('name',$value)->first()??abort(404);});}访问当前路由$路线=路线::当前();//当前路由对象$name=Route::currentRouteName();//当前路由名称$action=Route::currentRouteAction();//目前路由行为的整体用法不支持在单个路由中使用命名空间路由参数,不能使用命名空间参数或命名空间方法//1.单个路由。单个路由不支持命名空间路由参数,不能使用命名空间参数或命名空间方法//1.1用法1.Route::get('users/{user}',['middleware'=>'web',//middleware//'domain'=>'test.myapp.com',//子域'prefix'=>'admin',//路由前缀'as'=>'admin.user',//路由名称(也calledroutealias)//为控制器/闭包函数选择一个。'uses'=>'App\Http\Controllers\UsersController@index',//Controllerbehavior]);//1.2写法2.Route::get('users/{user}',['middleware'=>'web',//middleware//'domain'=>'test.myapp.com',//子域'prefix'=>'admin',//路由前缀'as'=>'admin.user',//routingname(又叫路由别名function(){return"hellothisistheoverallusagetestofrouting";}]);//1.3写法三。Route::get('users/{user}','App\Http\Controllers\UsersController@index')->middleware('web')//->domain('test.myapp.com')->prefix('admin')->name('admin.user');//2.对于路由组//2.1写法Route::namespace('App\Http\Controllers')->middleware('web')//->domain('test.myapp.com')->prefix('admin')->name('admin.')->group(function(){Route::get('users/{user}','UsersController@index')->name('user');});//2.2方式2Route::group(['middleware'=>'web',//'domain'=>'test.myapp.com','prefix'=>'admin','namespace'=>'App\Http\Controllers','as'=>'admin.'],function(){Route::get('users/{user}','UsersController@index')->name('user');});指HTTP请求方式:GET、POST、PUT、DELETE等。?UnifiedResourceIdentifier,统一资源标识符。?