1 常用的基础路由:
基础路由
larvael 版本 高于 5.4 版本:
最经典的版本就是:
Route::get(‘/url’,function(){
return ‘Hello world’;
});
函数名字: Route::get()
进行路由的地址:
/index.php/url
或者
/url
后面,因为是 伪静态的情况做的。
对应执行的匿名函数: function(){}; 通过return 返回数据到页面
2 常见路由
2 常见 提交方式的 路由匹配规则 ,laravel 可以通过不同的方式访问一个相同的地址,进行 路由的分发,就好比,不同类型交通的方式到达宾馆的宾客,宾馆前台会用不同的态度对待的。程序都是这样啊!哎
Route::get/post/put/patch/delete/options
然后为了做个兼容。
提升了更平滑的兼容方式:
Route::match/any 用法
match是可以匹配上面的6中方式里面的任何组合,例如: match([‘get’,’post’],’/url’,function(){});
Route::any(‘/url’,function(){});
注意:在我们laravel 里面所有的form 表单,默认需要 {{csrf_field()}} 这个 token 认证。
3 参数说明
3.1 基本参数 例如:
Route::get('/user/{id}',function($id){
return 'User '.$id;
});
这里的 {id} 就会变成 $id 传递到后面的函数里面,或者后面控制的参数里面,但是作为第二个参数使用。
注意:后面我们可以使用 映射政策 把 id 转化为相关对应的模型。 Policy 的方式。
3.2 多参数匹配
Route::get('/User/{id}/Boy/{name}',function($id,$name){
// TODO
});
不多解释,就是这样了。
3.3 默认的选项
Route:get('/User/{name}',function($name = 'JS'){
return $name;
});
说明:默认给出值。
4 验证规则
4.1 基本验证方法:
Route::get(url,function(){})->where([规则数组]);
例如:
例子1: 单独的验证 ———-> 传入的是两个字符串
Route::get(‘/User/{name}’,function($name){
// TODO
})->where(‘name’,’[A-Za-z]’);
例子2: 更多验证-----------------》传入数组
Route::get('/User/{id}/{name}',function($id,$name){
//TODO
})->where(['id'=>'[0-9]+','name'=>'[a-z]+']);
4.2 开启全局验证
开启方式就是在boot 方法里面加入路由规则即可。
public function boot(){
Route::patter('id','[0-9]+');
parent::boot();
}
经过这样的设置之后,在任何位置使用我们的 {id} 都会按照这个规则先验证的。也许是个不错的习惯,看个人喜好!,如果用的地方多的,可以选择这种。
5 路由别名
5.1 基础规定
Route::get()->name(别名);
例如:
Route::get('/User','UserController@show')->name('myUser');
Route::get('/User/{id}',function($id){
//TODO
})->name('user2');
5.2 别名的使用
获取url 地址
$url = route('myUser');
进行跳转 并且 给生产的URL 地址赋予初始的值
return redirect()->route('user2',['id'=>1]);
6 路由群组
注意这里的关键字:
6.1 中间件
说明:只要添加了中间件,就是这执行这个操作之前,会先执行我们的 中间件
例子:
Route::group(['middleware'=>'auth'],function(){
Route::get('/',function(){
// Uses Auth Middleware
});
Route::get('/user/{id}',function(){
// User Auth Middleware
});
});
6.2 命名空间
Route::group(['namespace'=>'Admin'],function(){
// Controller Within The "App\Http\Controller\Admin"
});
6.3 二级域名路由
Route::group(['domain'=>'{account}.myapp.com'],function(){
Route::get('user/{id}',function($account,$id){
//TODO
});
});
6.4 路由前缀
Route::group(['prefix'=>'admin'],function(){
Route::get('user',function(){
// 匹配的网址是 "/admin/user" URL
});
});
7 路由绑定处理模型
7.1 隐式绑定
id 到 Model , 注意数据库里面的必须是 id ,但是可以修改 对应的字段。
通常的处理方式:
Route::get('api/user/{id}',function($id){
return $id;
});
修改后的方式
Route::get('api/users/{user}',function(App\User $user){
return $user->email;
});
这里通过 {id} 跟下面的 {user} 是一样的,其实都是我们的 user_id
第一种传递过去的就是普通的 user_id,
第二种 通过 user_id 映射到了 App\User 类,并且按照 user_id = 固定值的 一个实例,所以可以展示出来 $user->email 数据
注意:此处默认 给到的数据,对应到的 是我们 数据库里面的 Id,必须是id 字段,如果想要修改呢?
那个就需要在我们的模型处理类里面 添加如下函数,来修改 对应数据库的 字段。
public function getRouteKeyName(){
return 'slug';
}
7.2 显式绑定
绑定方式:通过 app\Http\Providers\RouteServiceProvider 里面的 boot 方法进行设置。如下代码:
public function boot(){
parent::boot();
Route::model('user',App\User::class);
}
注意:此处需要使用 use App\User ;
例子: 匿名函数使用
Route::get('user/{id}',function(App\User $user){
// TODO
});
例子:控制器使用
Route::get('user/{id}','UserController@index');
对应的 传递到控制器里面的方法参数应该这样写:
public function index(Request $request, User $user){
//TODO
return $user->email; // 可以直接实例化使用这里的数据了,哈哈
}
7.3 指定返回模型逻辑
说明:通过 修改 bind 里面的匿名函数 进行返回逻辑的修改。
例如:
public function boot(){
parent::boot();
Route::bind('user',function($value){
return App\User::where('name',$value)->first();
});
}
通过这样的修改,我们就可以把 前面 url 地址中的 数值,指向对应 数据库里面 的 name , 感觉跟上面,修改映射 数据库字段有相同的奥妙。
这样通过修改,应该的 字段,及 修改,映射逻辑关系,使得 模型,变得异常的强大!
8 表单欺骗
因为我们要使用 get/post/delete/put/patch/option 这6中方式提交,但是 默认的 http 提交仅仅支持 get/post
所以,laravel 给我们提供了一种欺骗 http 的方式,这个跟我们平时的欺骗方式是一样的。
但是,laravel 进行了封装。
正常的写法:
<form action="/user" method="POST">
<input type="hidden" name="_method" value="PUT">
</form>
在我们的laravel 里面可以用 这样的写法
<form action="/user" method="POST">
{{method_field('PUT')}}
</form>
是不是就很简洁了呢?? 哈哈
9 获取当前路由规则
上面一路折腾,都快忘了自己的旅游规则了
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();