基本路由
路由参数
资源路由
命名空间
路由前缀
路由中间件
最先了解的就是laravel
的路由文件所在地:
laravel路由所在的文件就是在项目的根目录下面的/route/web.php|api.php|...
基本路由写法:
Route::get('/',function(){
return view('index');
);
Route::get('/',function(){
return "hello laravel !!!"
;
);
前面可以是一个路由名URI
,后面可以传递一个闭包函数,真是很方便也好理解。比如下面这样:
//只允许get方法访问
Route::get('index',function(){
return 123;
);
//只允许post方法访问
Route::post('index',function(){
return 123;
);
//只允许put方法访问
Route::put('index',function(){
return 123;
);
//只允许patch方法访问
Route::patch('index',function(){
return 123;
);
//只允许delete方法访问
Route::delete('index',function(){
return 123;
);
//只允许options方法访问
Route::options('index',function(){
return 123;
);
//任何方法访问
Route::any('index',function(){
return 123;
);
any()
<input type="hidden" name="_method" value="put"/>
<input type="hidden" name="_method" value="delete"/>
<input type="hidden" name="_method" value="patch"/>
当然上面只是一种方式,而且是最好记忆的,最好理解的,laravel还提供了辅助函数,这个就需要我们自己去探讨了,但是辅助方法的本质就是上面的样子。所以理解了
上面的这样的写法,那么任何辅助函数就好理解的,辅助函数也是让我们书写更加方便快捷。比如laravel提供的{ { method_field('PUT')}}
同样的在基本路由中,我们不仅可以传递闭包函数,还可以和控制器绑定,下面这样
Route::get('index','IndexController@index');
它的第二个参数就是:控制器@控制器里面的方法名。这样的写法一目了然,很容易的见名知意。
Route::redirect('index','one',302)
这里想要访问一个路由,然后让它跳转到别的路由上去,就可以使用重定向路由,它有三个参数:
参数一:访问的uri
参数二:要跳转到的uri
参数三:跳转的状态码
laravel
的blade
模板编写的页面展示,那么就可以这样写:Route::view('test','index');
这里使用的就是view()方法,它会自动渲染到对应的视图文件。比如我们在安装laravel的时候,打开你的项目,然后访问首页。是一个laravel自定义的页面,我们
就可以把它改为这样:
Route::view('/','welcome');
这个view()
方法同样需要三个参数:
参数一:需要访问的uri
参数二:需要显示的视图
参数三:传递给视图的参数,是一个数组
注意: 这里的参数一和参数二都是必传的参数,参数三是选传的
路由参数可以分为必穿参数和可选参数,它们的写法如下:
Route::get('index/{id}','IndexController@index');
Route::get('index/{id}?','IndexController@index');
传递的参数需要加上花括号,用花括号包裹起来就是参数名,当然这个参数名可以随便起,最好是形象的最好,这个不做过多的要求,比如要查询具体的那一篇文章,就需
要传递文章的id,这个时候就可以在路由中加入id这个参数。同时,id只能是数字,就可以再次加上正则表达式的过滤,写法如下:
//这里是支持PHP中所有正则表达式的写法的,只能让请求的数据传递数字也就是0-9的int类型数字
Route::get('index/{id}','IndexController@index')->where('id', '[0-9]+');
同时有的时候,参数不是必须传递的时候,就可以在花括号的后面加上一个问号?
,这个时候就代表,你可以传递参数,也可以不传递参数,请求都可以顺利到达。还有
一点,参数同样可以传递的不止一个,可以传递多个参数。下面这样的写法:
Route::get('index/{id}?/test/{com}')->where(['com','[a-z]+']);
上面这样的还可以写很多,只要你有需要的都可以写进去。只要用大括号包裹起来就可以了。不是必传的参数就直接在后面加上问号就好了。
Route::resource('index','IndexController');
写法简单,下面是它的详解:
|metthod | uri |controller@function | |
|
| get |/index |function index() |得到一个展示列表 [list] |
|
| get |/index/create |function create() |显示创建的form表单 |
|
| get |/index{
id} |function show() |显示对应id的内容 |
|
| get |/index/{
id}/edit |function edit() |对应id编辑显示form表单 |
|
| post |/index |function store() | 表单提交的内容 |
|
| put |/index/{
id} |function save() |对应编辑的form表单内容提交[更新] |
|
| delete |/index/{
id} |function destory() |删除对应id的内容。[删除] |
ps 当然上面几个
put|delete
这是需要在表单提交的时候做表单伪造了。还有一点,在资源路由后面还可以加上两个函数only()
和except()
其中only()
方法是对那几个方法使用资源路由,except()
这个方法是排除那几个方法不使用资源路由。
Route::group(['namespace'=>'Admin'],function(){
});
Route::group(['namespace'=>'Home'],function(){
});
Route::group(['namespace'=>'Test'],function(){
});
Route::namespace('Admin')->group(function(){
});
Route::namespace('Home')->group(function(){
});
Route::namespace('Test')->group(function(){
});
这样我对应的在/app/http/controllers/
下面,我也是同样有Admin|Home|Test
文件夹。这样使用了命名空间路由。就可以少写很多代码,不用每次还要加
上前面的命名空间的那一大串
Route::prefix('admin')->group(function(){
Route::get('index',function(){
return 'hello laravel!!!' }) });
Route::prefix('home')->group(function(){
Route::get('index',function(){
return 'hello laravel!!!' }) });
Route::prefix('test')->group(function(){
Route::get('index',function(){
return 'hello laravel!!!' }) });
访问的时候,第一个就是 http://admin123456.pc:8001/admin/index
,第二个:http://admin123456.pc:8001/home/index
, 第三个:http://admin123456.pc:8001/test/index
Route::middleware('test')->group(function(){
});
同样在这个里面添加路由,都会先经过,test
这个中间件。