windows下laravel5.5手寫教程2路由Eloquent ORM操做(適合初學者)

1、路由目錄php

衆所周知,對於咱們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統都是極其重要的存在。
對於laravel框架也同樣,對於數據庫的操做,無非就是增刪改查,只不過框架不一樣,語法不一樣,
因此掌握laravel框架的路由系統對於咱們掌握該框架有着相當重要的做用。
咱們知道對於LARAVEL框架之前的版本,路由都是寫在app裏的,如今的laravel框架路由存在在Routes目錄下,以下圖所示:

圖片描述

全部的 Laravel 路由都在 routes 目錄中的路由文件中定義,這些文件都由框架自動加載。
routes/web.php 文件用於定義 web 界面的路由。
這裏面的路由都會被分配給 web 中間件組,它提供了會話狀態和 CSRF 保護等功能。
定義在 routes/api.php 中的路由都是無狀態的,而且被分配了 api 中間件組。
咱們先來熟悉一下HTTP訪問的幾種方法:
1.  Get方法:經常使用的方法,略;
2.  Post方法:經常使用的方法,略;
3.  Head方法:與get方法相似,主要是爲了獲取某個訪問的頭部信息,
服務器不返回請求內容;
4.  PUT方法:請求往服務器上存文件;
5.  DELETE方法:請求刪除服務器上的文件;
6.  TRACE方法:就是獲取服務器收到的來自客戶端的請求信息(收發調試),
通常用於調試服務器;
7.  Connect方法:把服務器做爲跳板,讓服務器代替用戶去訪問其它網頁,
以後把數據原本來本的返回給用戶;
8.  Options方法:獲取服務器URI所支持的方法,或用於檢查服務器的性能,
ajax進行跨域訪問時,先發送options方法來判斷請求是否安全。

2、熟悉路由laravel

咱們先寫幾個簡單的路由來認識一下Laravel下的路由路徑。
在開始練習以前,咱們先關閉routes/web.php 下的下面兩行auth相關代碼,避免影響練習測試。
//Auth::routes();
//Route::get('/home', 'HomeController@index')->name('home');

圖片描述

此刻咱們訪問127.0.01:9999/news時,顯示的應該是NEWS字樣。
接下來咱們來給數據表中填充十組數據,而後創建Model類以及控制器,經過路由來訪問這些數據。(這裏就不經過laravel自帶的 seed 填充了,有興趣的朋友能夠自行查詢怎麼填充模擬數據.關鍵字"laravel seeder")。表結構以下圖所示

圖片描述

使用artisan命令創建Model類,打開cmd 切換到項目根目錄,輸入php artisan make:model News
獲得以下圖所示

圖片描述

打開app/News.php 文件,因爲laravel默認Model類對應的表名爲類名加s,既對應的表應該是newss,咱們在文件中加入protected $table = 'News',指定該model類對應表news。
咱們再使用artisan創建控制器. php artisan make:controller IndexController
成功以後,打開app/Http/Controllers/IndexController.php ,測試成功。

圖片描述
加入路由
圖片描述
測試成功
圖片描述web

至此說明咱們已經能夠經過路由訪問通控制器,
接下來咱們來使用Eloquent ORM 來調取數據庫數據。

圖片描述
如上圖,須要在文件頭部引入對應Model類
use AppNews ,而後 在方法Index裏調用News::all() Eloquent方法,而後展現出數組模式,toArray();
圖片描述ajax

除此以外,咱們還可使用DB類的靜態方法來和數據庫進行交互。
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\News;
use DB;
class IndexController extends Controller
{
    public  function index()
    {
//        echo '測試成功!';
//        var_dump(News::all()->toArray());
        $news = DB::table('news')->get();
        var_dump($news);
    }
}

以上只是數據庫最簡單的展現方法,具體的增刪改查咱們會在下節教程繼續學習,如今咱們再回過頭來,看看路由的幾種規則。
一、路由的match、any方法
/*
match方法是laravel本身封裝好的,一樣它的意思是匹配
*/數據庫

Route::match(['get,post],'admin/login',function(){
    return 'login';
});

/*
在這裏呢咱們能夠用match這個方法去匹配兩種請求方式,這樣是否是減小了代碼量呢
*/
咱們還有第二種方法,
/*
GET,POST,PUT,DELETE.. 任何方法訪問 www.itbool.com/Admin/login, 都用第2個參數中的匿名函數去響應全部HTTP動做 .
*/api

Route::any('Admin/login',function(){
    return 'hello world';
});

二、路由傳參
Laravel的路由傳參參數必須使用花括號來包裹而且是拼音字母例如使用{id}表示$id參數,具體示例以下圖所示:
圖片描述跨域

三、路由正則約束
即當咱們要驗證一些字段的時候,在laravel中,咱們能夠直接在路由中做出限制。
普通形式
->where('要限制的參數名','限制規則(正則,不用斜線//)');
數組形式
->where(['要限制的參數名1'=>'限制規則1(正則,不用斜線//)','要限制的參數名2'=>'限制規則2(正則,不用斜線//)']);
以下圖所示:
圖片描述數組

四、資源路由
例如:咱們先用artisan命令,生成一個控制器:安全

php artisan make:controller PhotoController   --resource

(artisan命令還有不少,能夠極大地提升咱們的開發速度)
接下來爲這個控制器註冊一個資源路由:服務器

Route::resource('photo','PhotoController');

此時打開cmd命令行 輸入php artisan route:list ,能夠看到以下圖
圖片描述
這個路由聲明建立多個路由來處理資源上的各類行爲。生成的控制器爲每一個行爲保留了方法,
同時還包括了 處理 HTTP 動做和 URI 的聲明註釋。
這裏須要注意的是由於 HTML 表單不能生成 PUT、 PATCH 或者 DELETE 請求,因此你須要添加一個隱藏的 _method 輸入字段來僞造這些 HTTP 動做。輔助函數 method_field 能夠幫你建立這個字段:

{{ method_field('PUT') }}

或者在表單中加入像這樣

<input type="hidden" name="_method" value="put">

表單提交方式不須要變,依舊是 method='POST'便可。

五、控制器路由(5.3之後已經取消了,再也不贅述)
每條地址規則都要定義路由,豈不是很累,laravel有一個控制器路由,很好的解決了這個問題。

Route::controller('/example', 'ExampleController');    (5.3已棄用)

六、路由組
在不少模塊操做中咱們須要把路由分組,對於他們進行權限分組限制,這時候咱們就可使用路由組結合中間件Middleware來進行簡單的限制。
1)創建中間件
首先咱們在應用根目錄下運行以下Artisan命令生成一個測試用的中間件TestMiddleware:

php artisan make:middleware TestMiddleware

這樣會在/app/Http/Middleware目錄下生成一個TestMiddleware.php文件,
打開該文件編輯TestMiddleware類的handle方法以下:

public function handle($request, Closure $next)
{
    if($request->input('age')<18)
        return redirect()->route('refuse');
    return $next($request);
}

咱們在中間件中定義這段業務邏輯的目的是年齡18歲如下的未成年人不能訪問。
2)新增中間件屬性
而後咱們打開/app/Http/Kernal.php文件,新增TestMiddleware到Kernel的$routeMiddleware屬性:

test' => \App\Http\Middleware\TestMiddleware::class,到數組中去

3)定義路由組

Route::group(['middleware'=>'test'],function(){
    Route::get('/write/laravelacademy',function(){
        //使用Test中間件
    });
    Route::get('/update/laravelacademy',function(){
       //使用Test中間件
    });
});

Route::get('/age/refuse',['as'=>'refuse',function(){
    return "未成年人禁止入內!";
}]);

此時,咱們訪問127.0.0.1:9999/write/laravelacademy?age=15時候,
就會自動跳轉到http://127.0.0.1:9999/age/refuse

相關文章
相關標籤/搜索