Laravel学习三:路由以及跳转和重定向用法总结

首页 / 新闻资讯 / 正文

laravel 中路由规则可以自己定义!然后去使用。路由文件的位置在routes/web.php

1)、路由的定义格式:Route::请求方式(‘请求的URL’, 匿名函数或控制器响应的方法)

例;Route::get(‘/’,function(){return ‘hello word’});函数的返回值,就是请求的响应。
2)、路由中请求类型:

Route::get(‘$url’, $callback); Route::post(‘$url’, $callback); Route::put(‘$url’, $callback); Route::patch(‘$url’, $callback); Route::delete(‘$url’, $callback); Route::option(‘$url’, $callback);

有时候还需要注册路由响应多个http请求,可以通过match()方法来实现,或用any()方法注册一个路由来响应所有的http请求。

例:

Route::match(['get','post'],'/',function(){ // }); Route::any('foo',function(){ // });

3)、路由的传参:在访问的时候也可以进行传参,传的参数要用{}括起来,参数分为可选参数和必选参数

必选参数:有时候我们需要在路由中捕获URL片段,比如,要从URL中获得用户ID ,需要通过如下方式定义路由参数:

可选参数:有时候可能需要指定可选的路由参数,这可以通过在参数名后面加一个?标记实现,这种情况下要给相应变量指定默认值。

//必选参数 Route::get('user/{id}',function($id){     return 'User'.$id; }); //可选参数 Route::get('user/{name?}',function($name=null){     return $name; }); Route::get('user/{name?}',function($name='John'){     return $name; });

当你进行访问的时候,有参数而你没有传参则会报错,如果不想让他报错就需要给参数一个默认值null,在命名传参的时候要在后面加?

例: Route::get('hello5/{id?}',function($id=null){

     return $id;

 });

路由参数也可以进行正则匹配

Route::get('hello6/{id?}',function($id=null){    return $id; })->where('id','[A-Za-z]+');

路由参数也可以进行多个参数,也可以进行多个参数的正则匹配

Route::get('hello7/{id}/{name}',function($id,$name){     return $id.$name; })->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);

路由别名:路由别名是为了拿这个方法的路径 方法route() 是用来拿到路径的

Route::get('user/{name?}',function($name='John'){     return $name; })->name('zhangsan');

在命令行终端,可以使用命令以下命令查看系统已经定义好的路由别名:php artisan route:list

路由群组

把许多有共同前缀的的路由,为了方便管理,放到同一个分组中,使用prefix指定路由前缀。

Route::group(['prefix'=>'admin'],function(){     Route::get('user',function(){        //     });     Route::get('food',function(){      //     }); });

Route::get('Index/index/{id?}','IndexController@index');

可以把每个控制器中的方法创建成一个群组方便管理

例:

Route::group(['prefix'=>'Index'],function(){     //welcome方法    Route::get('welcome','IndexController@welcome');     //member方法     Route::get('member/{id?}/{name?}','IndexController@member'); });

【注】反斜杠不一样

return view('视图文件名称');

视图可以进行分目录管理,例如需要展示home/test/test3视图,则可以写成:return view('home/test/test3'),当然也支持点的写法:view('home.test.test3')

控制器给视图传递的数据形式有,字符串,数组,变量等,

view(模板文件名,数组)

view(模板文件名)->with(数组)

view(模板文件名)->with(名称,值)->with(名称,值)

compact函数是PHP内置函数,跟laravel框架没关系,该函数的作用:用于打包数组。

1:在写模型时要先继承父类模型:use Illuminate\Database\Eloquent\Model;
2:模型在控制器中的使用方式有两种:  

①直接以调用静态方法为主的形式,该形式下模型不需要实例化,例如:Member::get()等价于 DB::table('member')->get();

②实例化模型然后再使用模型类:例如:$member=new Member(); $member->get();

例:  {{$name}};

1、常规的直接响应,例:展示视图:return view('welcome');  直接返回某个字符串:return 'hello world';

2、ajax响应: return response()->json(需要json输出的数据),例:

public function test(){     $data=Member::all();     return response()->json($data); }

补充:boolean值在laravel 中是不能通过return输出的,所以response也是不能响应bool值。

3、跳转响应(重定向)也有两种方式:return redirect('路由'); (该路由可以是完整的请求路由,也可以是通过route()+别名获取的路由) 或者  return redirect()->to('路由'); 

 

Top