您的位置:首页 > 编程语言 > PHP开发

[李景山php]每天laravel[024]-laravel 基础知识 --- 路由

2017-03-31 10:56 639 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 函数
相关文章推荐