1. 程式人生 > 實用技巧 >Laravel 簡單入門,路由的使用(一)

Laravel 簡單入門,路由的使用(一)

一、安裝 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()表示不管你是哪種提交方式,我智慧的全部接收響應
(4)::match()表示接收你指定的提交方式,用陣列作為引數傳遞
//只能接受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/users
7、名稱空間,控制器巢狀

在\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