Laravel 簡單入門,路由的使用(一)
阿新 • • 發佈:2021-01-03
一、安裝 Laravel
Laravel 使用Composer來管理專案依賴。因此,在使用 Laravel 之前,請確保您的機器上已經安裝了 Composer。
composer create-project --prefer-dist laravel/laravel blog
二、路由的定義
1、路由的定義檔案在根目錄 routes/web.php 中,可以採用了:
(1)::get()這個方法,它接受的就是 GET 提交 (2)::post()、::put()、::delete()是表單和 Ajax 的提交接受方式 (3)::any()表示不管你是哪種提交方式,我智慧的全部接收響應//只能接受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]+']);如果想讓約束 id 只能是 0-9 之間作用域全域性範圍,可以在模型繫結器裡設定;模型繫結器路徑為:app\Providers\RouteServiceProvider 的 boot()方法;
public function boot() { // Route::pattern('id', '[0-9]+'); parent::boot(); }注:如果 id 已經被全域性約束,在某個區域性你想讓它脫離約束,可以如下操作:...->where('id', '.*')
4.路由重定向
可以設定訪問一個路由的 URI,跳轉到另一個路由的 URI,在web.php具體如下: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/users7、名稱空間,控制器巢狀
在\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、路由回退
如果我們跳轉到了一個不存在路由時,會產生 404 錯誤,體驗不佳;可以使用回退路由,讓不存在的路由自動跳轉到你指定的頁面去;Route::fallback(function (){ return redirect("/"); });
注:回退路由,注意要放在最底部
10、路由重定向
(1). 重定向使用助手函式 redirect()的 to()方法,注意需要 return 才能跳轉;return redirect()->to('/'); //跳到首頁 return redirect()->to('task'); //跳轉到 task return redirect()->to('task/url'); //跳轉到 task/url(2). 也可以直接使用快捷方式直接進行跳轉;
return redirect('/'); //跳到首頁 return redirect('task'); //跳轉到 task return redirect('task/url'); //跳轉到 task/url(3). redirect()助手有一個對應的 facade 模式物件;
return Redirect::to('/'); //facade 模式,但需要 use 引入(4). 使用 redirect()的 route()方法,可以跳轉到指定的命名路由 URI;
return redirect()->route('task.index'); //注意和 route()方法區別(5). 使用 redirect()的 back()方法,可以重定向到上一個頁面中;
return redirect()->back(); return back(); //快捷方式(6). 使用 redirect()的 action()方法,可以直接重定向到控制器方法;
return redirect()->action('TaskController@index'); //需註冊路由 return redirect()->action('TaskController@index', ['id'=>10]);(7). 使用 redirect()的 away()方法,跳轉到外部連結;
return redirect()->away('http://www.baidu.com'); //不帶任何編碼
laravel官網:https://learnku.com/docs/laravel/8.x/installation/9354