6.27——基本路由

6.27-7.4的任務(wù):

1.閱讀Laravel中文文檔,建立項(xiàng)目進(jìn)行嘗試

2.加深對(duì)于sql的了解

3.看代碼,樂(lè)器博物館和新聞


記錄-Laravel中文文檔學(xué)習(xí):


——Route的范式:Route::get($uri, $callback); ? ? uri是路由的輸入,callback是返回值,callback的位置是一個(gè)閉包,目前理解為一個(gè)函數(shù)???


——設(shè)定可選參數(shù),需要設(shè)定默認(rèn)值,否則閉包中可能缺少參數(shù)

Route::get('user/{name?}', function ($name = null) {

return $name;

});


——正則約束,基本夠用的格式:‘a(chǎn)bc’ 寫(xiě)死的字符,‘[0-9][a-z][K-X]’ 一個(gè)范圍內(nèi)的字符,‘?’ 0或1個(gè),‘+’ 1或多個(gè), ‘{1,10}’ 控制字符串長(zhǎng)度

Route::get('member/{id}/{name}',function($id,$name) {

return'hello '.$id.' '.$name;

})->where(['id'=>'u[0-9]{1,5}','name'=>'[0-z]+']);


——全局約束有什么作用??


——群組路由&命名路由,該例中群組路由的名稱(chēng)為‘group’,其附屬的路由名稱(chēng)為‘group::name’,所以調(diào)用route方法生成Level2的url時(shí),參數(shù)名稱(chēng)為‘group;;Level2’,但是在訪問(wèn)url時(shí),地址輸入為http://localhost/Learning/public/Level2,可見(jiàn)群組的名稱(chēng)只是在代碼范圍內(nèi)給路由的一個(gè)“代號(hào)”,而并不是真正路由的一部分

Route::group(['as'=>'group::'],function(){

Route::get('Level2',['as'=>'Level2',function(){

returnroute('group::Level2');

}]);

});


——為命名路由生成URL

如果命名路由定義了參數(shù),可以將該參數(shù)作為第二個(gè)參數(shù)傳遞給route函數(shù)。給定的路由參數(shù)將會(huì)自動(dòng)插入 URL 中:

Route::get('make_file/{id}/profile', ['as' => 'profile', function ($id) {

$url = route('profile', ['id' => 1]);

return $url;

}]);

以上代碼輸入:http://localhost/Learning/public/make_url/15/profile

返回結(jié)果為:http://localhost/Learning/public/make_url/1/profile

可見(jiàn)該段代碼將‘id’寫(xiě)死為1,無(wú)論路由中輸入的{id}是什么,生成的都是id為1時(shí)的URL

嘗試將代碼里route函數(shù)中的第二個(gè)參數(shù)注釋掉,即為route('profile'),運(yùn)行結(jié)果報(bào)錯(cuò),于是推測(cè)route()函數(shù)第一個(gè)參數(shù)是需要生成URL的route的名稱(chēng),函數(shù)會(huì)在確認(rèn)該route之后去判斷該route中是否存在變量(比如該例中的id),為了驗(yàn)證該猜想,決定構(gòu)造一個(gè)含有兩個(gè)參數(shù)的route,然后只給route()函數(shù)兩個(gè)參數(shù),如果會(huì)報(bào)相同的錯(cuò),說(shuō)明猜想成立

//構(gòu)造該路由用于探索route函數(shù)的工作機(jī)制

Route::get('make_url_2/{id}/{name}/profile', ['as'=>'2vars',function($id) {

$url= route('2vars',$id);

return$url;

}]);

果然報(bào)了Missing required parameters的錯(cuò)誤,可見(jiàn)猜想成立


——Laravel有沒(méi)有使用手冊(cè)(有,已經(jīng)找到了,順便看一下怎么做CHM,好好玩)


——意識(shí)到一個(gè)小問(wèn)題,如果不同路由給相同的別名會(huì)怎么樣,試一下。。。。搞事情

試了一下,結(jié)果很奇怪,暫時(shí)沒(méi)有判斷出其中的機(jī)制


——路由組群

中間件是什么??? ?似乎后文會(huì)有解釋?zhuān)瑫簳r(shí)跳過(guò)

命名空間,感覺(jué)就是為了防止重名而加的地址

路由群組可以為其中的子路由添加中間件和命名空間,代碼略

路由群組對(duì)于子路由只有給路由名稱(chēng)提供統(tǒng)一前綴,以及給所有子路由提供相同性質(zhì)這樣的作用,而并不能影響其URL,

——子域名路由,比較有趣,在group路由之中,可以捕獲參數(shù),其中所有的子路由也都會(huì)有捕獲這個(gè)參數(shù)的能力,以下為例子:。。。。。子域名沒(méi)有設(shè)置好,很煩


——路由前綴

//路由前綴

Route::group(['prefix'=>'admin'],function() {

Route::get('subfix',function() {

return'hello';

// 匹配 "/admin/users" URL}); ?});

//路由前綴可以含有變量

Route::group(['prefix'=>'{admin}'],function() {

Route::get('subfix_2',function($admin) {

return'hello '.$admin;

// 匹配 "/admin/users" URL}); ?});

//輸入:http://localhost/Learning/public/kidding/subfix_2

//返回:hello kidding


——防御CSRF攻擊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容