Laravel學習三:框架路由總結

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('路由'); 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章