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

47 篇文章 0 订阅

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值