1、路由的定義規則:
laravel 中路由規則可以自己定義!然後去使用。路由文件的位置在routes/web.php
1)、路由的定義格式:Route::請求方式(‘請求的URL’, 匿名函數或控制器響應的方法)
例;Route::get(‘/’,function(){return ‘hello word’});函數的返回值,就是請求的響應。
2)、路由中請求類型:
Route::get(‘$url’, $callback);
Route::post(‘$url’, $callback);
Route::put(‘$url’, $callback);
Route::patch(‘$url’, $callback);
Route::delete(‘$url’, $callback);
Route::option(‘$url’, $callback);
有時候還需要註冊路由響應多個http請求,可以通過match()方法來實現,或用any()方法註冊一個路由來響應所有的http請求。
例:
Route::match(['get','post'],'/',function(){
//
});
Route::any('foo',function(){
//
});
3)、路由的傳參:在訪問的時候也可以進行傳參,傳的參數要用{}括起來,參數分爲可選參數和必選參數
必選參數:有時候我們需要在路由中捕獲URL片段,比如,要從URL中獲得用戶ID ,需要通過如下方式定義路由參數:
可選參數:有時候可能需要指定可選的路由參數,這可以通過在參數名後面加一個?標記實現,這種情況下要給相應變量指定默認值。
//必選參數
Route::get('user/{id}',function($id){
return 'User'.$id;
});
//可選參數
Route::get('user/{name?}',function($name=null){
return $name;
});
Route::get('user/{name?}',function($name='John'){
return $name;
});
當你進行訪問的時候,有參數而你沒有傳參則會報錯,如果不想讓他報錯就需要給參數一個默認值null,在命名傳參的時候要在後面加?
例: Route::get('hello5/{id?}',function($id=null){
return $id;
});
路由參數也可以進行正則匹配
Route::get('hello6/{id?}',function($id=null){
return $id;
})->where('id','[A-Za-z]+');
路由參數也可以進行多個參數,也可以進行多個參數的正則匹配
Route::get('hello7/{id}/{name}',function($id,$name){
return $id.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);
路由別名:路由別名是爲了拿這個方法的路徑 方法route() 是用來拿到路徑的
Route::get('user/{name?}',function($name='John'){
return $name;
})->name('zhangsan');
在命令行終端,可以使用命令以下命令查看系統已經定義好的路由別名:php artisan route:list
路由羣組
把許多有共同前綴的的路由,爲了方便管理,放到同一個分組中,使用prefix指定路由前綴。
Route::group(['prefix'=>'admin'],function(){
Route::get('user',function(){
//
});
Route::get('food',function(){
//
});
});
2、配置控制器路由
Route::get('Index/index/{id?}','IndexController@index');
可以把每個控制器中的方法創建成一個羣組方便管理
例:
Route::group(['prefix'=>'Index'],function(){
//welcome方法
Route::get('welcome','IndexController@welcome');
//member方法
Route::get('member/{id?}/{name?}','IndexController@member');
});
【注】反斜槓不一樣
3、頁面渲染:
return view('視圖文件名稱');
視圖可以進行分目錄管理,例如需要展示home/test/test3視圖,則可以寫成:return view('home/test/test3'),當然也支持點的寫法:view('home.test.test3')
控制器給視圖傳遞的數據形式有,字符串,數組,變量等,
view(模板文件名,數組)
view(模板文件名)->with(數組)
view(模板文件名)->with(名稱,值)->with(名稱,值)
compact函數是PHP內置函數,跟laravel框架沒關係,該函數的作用:用於打包數組。
4、控制器調用模型:
1:在寫模型時要先繼承父類模型:use Illuminate\Database\Eloquent\Model;
2:模型在控制器中的使用方式有兩種:
①直接以調用靜態方法爲主的形式,該形式下模型不需要實例化,例如:Member::get()等價於 DB::table('member')->get();
②實例化模型然後再使用模型類:例如:$member=new Member(); $member->get();
5、在模板中展示數據要使用兩個花括號 {{展示名}}
例: {{$name}};
6、laravel跳轉與響應總結
1、常規的直接響應,例:展示視圖:return view('welcome'); 直接返回某個字符串:return 'hello world';
2、ajax響應: return response()->json(需要json輸出的數據),例:
public function test(){
$data=Member::all();
return response()->json($data);
}
補充:boolean值在laravel 中是不能通過return輸出的,所以response也是不能響應bool值。
3、跳轉響應(重定向)也有兩種方式:return redirect('路由'); (該路由可以是完整的請求路由,也可以是通過route()+別名獲取的路由) 或者 return redirect()->to('路由');