路由的理解
我們所了解的很多框架通常都有自己有路由的定義規則,個人覺得Thinkphp是一個更容易讓新手去接觸和學習的一個框架。然而在TP中的默認路由規則是http://www.itbool.com/Model/Controller/Action,假如我們訪問一個地址是http://www.itbool.com/Home/Index/index,默認請求會去訪問Home模塊下的Indexcontroller控制器類下的index方法,說到這里呢,這是在TP框架中路由的使用。
從上述中去理解,個人覺得在TP框架中定義的路由規范可以直接拿出來使用,非常的容易去理解,但是使用起來呢很不靈活,因為我們必須要遵循TP中的那種規范,比如說我想要通過向http://www.itbool.com/Admin/article/addPOST一個數據以添加一篇文章,處理這個過程的實際是AdminTopicControlle類的create方法,且該方法只接受POST請求,這時候似乎大多數框架就要通過寫更多的代碼實現了。
上述呢,是在TP中路由的一種定義規范,但是相比于laravel呢?
laravel中路由的定義
1,簡單的說就是將用戶的請求轉發給相應的程序去處理
2,作用建立url和程序之間的映射
3,請求類型get,put,post,patch,delete等
laravel的路由器與控制器的關系,需要明確的在<project>/app/Http/routes.php
下面呢,我們一起來學西laravel中的路由
基礎路由
格式如下
/*用Get方式去請求Home/index這個地址的時候,用匿名函數響應*/Route::get('Home/index',function(){return 'hello world';});地址欄上可以這樣去訪問 http://www.itbool.com/Home/index/*用post方式去請求Home/index這個地址的時候,用匿名函數響應*/Route::post('Home/index',function(){return 'hello world';});這樣如果在地址欄上去訪問的話,會報錯,因為我們使用post方式去提交,所以當我們去提交form 表單的時候,我們定義的這條路由才起作用
多請求路由
比如我們在注冊或者登陸頁面的時候呢,我們需要用Get方式去獲取頁面,然后用POST方式去提交,但是它響應的是一條路由,只不過方式不同
遇到這樣的情況,怎么辦呢?難道去定義兩條路由,這樣是不是增加了代碼量呢?
我們可以這樣解決
格式如下
/*match方法是laravel自己封裝好的,同樣它的意思是匹配*/Route::match(['get,post],'admin/login',function(){return 'login';});/*在這里呢我們可以用match這個方法去匹配兩種請求方式,這樣是不是減少了代碼量呢*/我們還有第二種方法,/*GET,POST,PUT,DELETE.. 任何方法訪問 www.itbool.com/Admin/login, 都用第2個參數中的匿名函數去響應 .*/Route::any('Admin/login',function(){return 'hello world';});
路由傳參
以上呢就是在laravel中路由用法,用匿名函數去相應,但是怎么去傳參呢,下面呢我們去分析:
```php
/*路由傳遞參數,*/Route::get('user/{id}',function($id){return 'user_'.$id;});地址欄上訪問 http://www.itbool.com/user/定義的數值
laravel的路由不僅可以這樣傳遞參數,還可以的傳遞可選參數
如下Route::get('user/{name}',function($name = null){return 'user_'.$name;});如果我們去訪問,http://www.itbool.com/user 會返回 user_如果我們去訪問,http://www.itbool.com/user/定義的名字 會返回user_+定義的名字
路由限制
在tp框架中,假如我們想要去驗證一些字段,那我們必須要去用tp的自動驗證,但是在laravel中是不用的,我們直接可以在路由中做限制
普通形式->where('要限制的參數名','限制規則(正則,不用斜線//)');數組形式->where(['要限制的參數名1'=>'限制規則1(正則,不用斜線//)','要限制的參數名2'=>'限制規則2(正則,不用斜線//)']);Route::get('user/name',function($name){return 'user_'.$name;})->where('name','[A-Za-z]+');只需要在路由后加where 兩個參數, 第一個是驗證的字段,第二個是你驗證的規則傳遞多個參數的定義Route::get('user/{name}/{id}',function($name,$id){return 'user_'.$name.$id;})->where(['name'=>'[A-Za-z]+','id'=>'[0-9]+']);
控制器與路由
因為我們在做一些項目的時候呢,功能區域呢是依靠我們的控制器中的方法去相應,那么在laravel中路由與控制器怎么使用呢?那么我們下面一起看一下
我希望通過http://www.itbool.com/訪問Home模塊下IndexController類的index方法,應該這樣定義一條路由:
Route::get('Home/index','HomeIndexcontroller@index');
例子很簡單,但是會遇到這樣的問題
這些呢就是laravel定義路由的簡單使用,那么我們在回到上述中的TP的路由規范,兩者對比,
在laravel中的定義,我們可以看出雖然laravel沒有強加給你既定的路由規則,但你擁有了更多定制的權利,并且laravel定義路由的方式非常優雅,帶給你的體驗非常豐富。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答