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攻擊