一、安装 Laravel
Laravel 使用 Composer 来管理项目依赖。因此,在使用 Laravel 之前,请确保您的机器上已经安装了 Composer。
composer create-project --prefer-dist laravel/laravel blog
二、路由的定义
1、路由的定义文件在根目录 routes/web.php 中,可以采用了:
//只能接受get请求 Route::get("index",function (){ return "Hello,Laravel!"; }); //只能接受get请求 Route::post("index",function (){ return "Hello,Laravel!"; }); //全部接收响应 Route::any("index",function (){ return "Hello,Laravel!"; }); //match()表示接收你指定的提交方式 Route::match(['get','post'],'index',function (){ return "Hello,Laravel!"; }); //http://la8.com/index
2、路由参数可分为必填参数和可选参数
//必填参数,http://la8.com/user/1 Route::get('user/{id}', function ($id) { return 'User '.$id; }); //多个参数,http://la8.com/posts/1/comments/2 Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { return 'posts:'.$postId.',comments:'.$commentId; }); //可选参数 Route::get('user/{name?}', function ($name = null) { return $name; });
3、正则表达式约束
你可以使用路由实例上的 where 方法约束路由参数的格式。where 方法接受参数名称和定义参数应如何约束的正则表达式:
Route::get('user/{id}/{name}', function ($id, $name) { return 'User '.$id.',name:'.$name; })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
public function boot() { // Route::pattern('id', '[0-9]+'); parent::boot(); }
4.路由重定向
Route::redirect('index', 'task');
5、路由命名
路由命名可以方便地为指定路由生成 URL 或者重定向。通过在路由定义上链式调用 name
方法可以指定路由名称
//通过设置路由来访问创建好的控制器,参数二:控制器@方法名 Route::get("task/url","TaskController@url")->name('task.url'); //http://la8.com/task/url
注意:路由命名必须是唯一的
6、路由分组和前缀
//route分组 Route::group(['prefix'=>'api'],function (){ Route::get("test2",function (){ return "index"; }); }); //route分组,推荐使用 Route::prefix('api')->group(function (){ Route::get("test2",function (){ return "index"; }); });
prefix
方法将会为路由组中的每一个 URI 添加前缀。例如,您可以给该组中所有的 URI 添加 admin
的前缀:
Route::prefix('admin')->group(function () { Route::get('users', function () { return "users"; }); }); //http://la8.com/admin/users Route::prefix('admin')->group(function () { Route::get('data1', 'DataController@index'); Route::get('data2', 'DataController@index2'); }); //http://la8.com/admin/data1 //http://la8.com/admin/data2
在\app\Http\Controllers\Admin\ManageController.php控制器:
//控制器嵌套,命名空间的设置 Route::namespace('Admin')->group(function (){ Route::get("manage","ManageController@index"); }); //http://la8.com/manage
8、路由名称前缀
//方式一 Route::group(['as'=>'lhs.'], function () { Route::get('roc', function () { //route() 函数为指定的路由生成路由 URL。 return route('lhs.index');//输出:http://la8.com/roc })->name('index'); }); //方式二 Route::name('lhs.')->group(function () { Route::get('roc', function () { //route() 函数为指定的路由生成路由 URL。 return route('lhs.users');//输出:http://la8.com/roc })->name('users'); });
9、路由回退
Route::fallback(function (){ return redirect("/"); });
注:回退路由,注意要放在最底部
10、路由重定向
return redirect()->to('/'); //跳到首页 return redirect()->to('task'); //跳转到 task return redirect()->to('task/url'); //跳转到 task/url
return redirect('/'); //跳到首页 return redirect('task'); //跳转到 task return redirect('task/url'); //跳转到 task/url
return Redirect::to('/'); //facade 模式,但需要 use 引入
return redirect()->route('task.index'); //注意和 route()方法区别
return redirect()->back(); return back(); //快捷方式
return redirect()->action('TaskController@index'); //需注册路由 return redirect()->action('TaskController@index', ['id'=>10]);
return redirect()->away('http://www.baidu.com'); //不带任何编码
11、表单伪造和 CSRF 保护
HTML表单支持GET请求,但表单不支持 PUT, PATCH 或 DELETE 请求。
Route::get('task/form', 'TaskController@form'); Route::any('task/getform', function () { return \Illuminate\Support\Facades\Request::method(); });
<form action="/task/getform" method="post"> <button type="submit">提交</button> </form>
<input type="hidden" name="_token" value="{{csrf_token()}}">
HTML 表单调用请求方式为 PUT
, PATCH
或 DELET
的路由时,您需要在表单中添加一个 _method
的隐藏域。_method
的值将会作为 HTTP 请求的方法:
<form action="/task/getform" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="hidden" name="_token" value="{{csrf_token()}}"> <button type="submit">提交</button> </form>
@csrf
@method('PUT')
laravel官网:https://learnku.com/docs/laravel/8.x/installation/9354