9月17日知識點記錄


一.Laravel控制器

基礎(chǔ)控制器(組織請求處理邏輯)

通過路由來指定控制器行為:
Route::get('user/{id}','UserController@showProfile');//路由所帶參數(shù)也會被傳遞到showProfile方法
命名控制器路由:
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);
$url = route('name')//生成命名控制器路由的 URL
$url = action('FooController@method');//生成指向控制器行為的 URL
$action = Route::currentRouteAction();//取到正在運行的控制器行為名稱

中間件和控制器:

Route::get('profile', [
    'middleware' => 'auth',
    'uses' => 'UserController@showProfile'
]);//將 中間件 指定給控制器路由

在控制器構(gòu)造器中使用 middleware 方法,你可以很容易地將中間件指定給控制器。你甚至可以對中間件作出限制,僅將它提供給控制器類中的某些方法。

 public function __construct()
    {
        $this->middleware('auth');

        $this->middleware('log', ['only' => ['fooAction', 'barAction']]);

        $this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);
}

RESTful 資源控制器資源

控制器讓你可以輕松地創(chuàng)建與資源相關(guān)的 RESTful 控制器,
使用 make:controller Artisan 命令,我們可以快速地創(chuàng)建一個像這樣的控制器
php artisan make:controller 控制器名稱
Route::resource('photos', 'PhotosController');//在控制器中注冊資源化路由
這一條路由聲明會創(chuàng)建多個路由,用來處理各式各樣和相片資源相關(guān)的的 RESTful 行為。同樣地,生成的控制器有著各種和這些行為綁定的方法,包含要處理的 URI 及方法對應(yīng)的注釋。
由資源控制器處理的行為:

動詞 路徑 行為(方法) 路由名稱
GET /photos index photo.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy

部分資源路由:(聲明資源路由時,你可以指定讓此路由僅處理一部分的行為)

Route::resource('photos', 'PhotosController',
                ['only' => ['index', 'show']]);
Route::resource('photos', 'PhotosController',
                ['except' => ['create', 'store', 'update', 'destroy']]);

命名資源路由(所有的資源控制器行為默認都有路由名稱;不過你可以在選項中傳遞一個 names 數(shù)組來重寫這些名稱)
Route::resource('photos', 'PhotosController', ['names' => ['create' => 'photo.build']]);
嵌套資源(有時你可能會需要定義「嵌套」資源路由。例如,相片資源可能會附帶多個「評論」。要「嵌套」此資源控制器,可在路由聲明中使用「點」記號)
Route::resource('photos.comments', 'PhotoCommentController');//photos/{photos}/comments/{comments}通過類示URL訪問
附加資源控制器(如果想在資源控制器中默認的資源路由之外加入其它額外路由,則應(yīng)該在調(diào)用 Route::resource 之前 定義這些路由。否則,由 resource 方法定義的路由可能會不小心覆蓋你附加的路由)

隱式控制器

通過定義單個路由來處理控制器類中的各種行為,
使用 Route::controller 方法來定義路由
Route::controller('users', 'UserController');//controller 方法接受兩個參數(shù)。第一個參數(shù)是控制器所處理的基本 URI,第二個是控制器的類名稱
只要在控制器中加入方法。方法的名稱應(yīng)由它們所響應(yīng)的 HTTP 動詞作為開頭,緊跟著首字母大寫的 URI 所組成

<?php
namespace App\Http\Controllers;

class UserController extends Controller
{
    /**
    * 響應(yīng)對 GET /users 的請求
     */
    public function getIndex()
   {
        //
    }

    /**
     * 響應(yīng)對 GET /users/show/1 的請求
     */
    public function getShow($id)
    {
        //
    }

    /**
     * 響應(yīng)對 GET /users/admin-profile 的請求
     */
    public function getAdminProfile()
    {
        //
    }

    /**
     * 響應(yīng)對 POST /users/profile 的請求
     */
    public function postProfile()
    {
        //
    }
}

分派路由名稱
命名控制器中的某些路由,可以在 controller 方法中傳入一個名稱數(shù)組作為第三個參數(shù)
Route::controller('users', 'UserController', [ 'getShow' => 'user.show', ]);

依賴注入與控制器

構(gòu)造器注入
方法注入...都不太懂

路由緩存

若你的應(yīng)用程序完全通過控制器使用路由,你可以利用 Laravel 的路由緩存。使用路由緩存可以大幅降低注冊全部路由所需的時間。
要生成路由緩存,只要運行 route:cache 此 Artisan 命令
php artisan route:cache
這就可以了!現(xiàn)在你的緩存路由文件將被用來代替 app/Http/routes.php 這一文件。請記得,若你添加了任何新的路由,就必須生成新的路由緩存。因此你可能希望只在你的項目部署時才運行 route:cache 這一命令。
要移除緩存路由文件而不生成新的緩存,請使用 route:clear 命令
php artisan route:clear

二.Laravel請求

獲取請求:要通過依賴注入的方式獲取 HTTP 請求的實例,就必須在控制器的構(gòu)造器或方法中,使用 Illuminate\Http\Request 類型提示

public function store(Request $request)
{
    $name = $request->input('name');

    //
}

如果控制器方法也有輸入數(shù)據(jù)是從路由參數(shù)傳入的,只需將路由參數(shù)置于其它依賴之后
EP:Route::put('user/{id}', 'UserController@update');

public function update(Request $request, $id)
{
    //
}

基本請求信息:Illuminate\Http\Request 的實例提供了多種方法來用于檢查應(yīng)用程序的 HTTP 請求。Larevel 的 Illuminate\Http\Request 繼承了 Symfony\Component\HttpFoundation\Request 類
獲取請求的 URI

$uri = $request->path();//path 方法會返回請求的 URI;
if ($request->is('admin/*')) {
     //is 方法可以驗證接收到的請求 URI 與指定的規(guī)則是否相匹配,*號為通配符
}
$url = $request->url();//使用 url 方法,可以獲取完整的網(wǎng)址

獲取請求的方法

$method = $request->method();//method方法會返回此次請求的http動作
if ($request->isMethod('post')) {
    //isMethod方法來驗證http動作是否和指定的字符串是否相匹配
}

獲取輸入數(shù)據(jù)

特定值:$request->input('name');``$request->字段名;
$request->input('name', 'Sally');//第二個參數(shù)中傳入一個默認值。當(dāng)請求的輸入數(shù)據(jù)不存在于此次請求時,就會返回默認值
$request->input('products.0.name');//如果是「數(shù)組」形式的輸入數(shù)據(jù),則可以使用「點」語法來獲取數(shù)組
$request->has('name')//確認是否有值
$input = $request->all();//獲取所有輸入數(shù)據(jù)
如果想獲取輸入數(shù)據(jù)的子集,則可以使用 only 及 except 方法。這兩個方法都接受單個數(shù)組或是動態(tài)列表作為參數(shù)
$input = $request->only(['username', 'password']); $input = $request->only('username', 'password'); $input = $request->except(['credit_card']); $input = $request->except('credit_card');
舊輸入數(shù)據(jù):Laravel 可以讓你將本次的輸入數(shù)據(jù)保留到下一次請求發(fā)送前。對于在表單驗證失敗后重新填入表單值相當(dāng)有用
將輸入數(shù)據(jù)閃存至 Session$request->flash();
$request->flashOnly('username', 'email'); $request->flashExcept('password');//數(shù)據(jù)的子集保存至 Session
閃存輸入數(shù)據(jù)至 Session 后重定向return redirect('form')->withInput(); return redirect('form')->withInput($request->except('password'));
獲取舊輸入數(shù)據(jù)->若要獲取上一次請求后所閃存的輸入數(shù)據(jù),則可以使用Request
實例中的old方法。old方法提供一個簡便的方式從 Session 取出被閃存的輸入數(shù)據(jù)
$username = $request->old('username');
Laravel 也提供了全局輔助函數(shù)old。如果你要在 Blade 模板 中顯示舊輸入數(shù)據(jù),可以使用更加方便的old輔助函數(shù){{ old('username') }}
從請求中取出Cookie值$value = $request->cookie('name');

上傳文件

獲取上傳文件,可以使用 Illuminate\Http\Request 實例中的 file 方法獲取上傳的文件。file 方法返回的對象是 Symfony\Component\HttpFoundation\File\UploadedFile 類的實例,該類繼承了 PHP 的 SplFileInfo 類,并提供了許多和文件交互的方法
$file = $request->file('photo');
$request->hasFile('photo')//確認上傳的文件是否存在
$request->file('photo')->isValid()//驗證上傳的文件是否有效
$request->file('photo')->move($destinationPath); $request->file('photo')->move($destinationPath, $fileName);//將文件從緩存位置(由你的 PHP 配置決定)移動至你指定的永久保存位置

三.視圖

視圖包含你應(yīng)用程序所用到的 HTML,它能夠?qū)⒖刂破骱蛻?yīng)用程序邏輯在呈現(xiàn)邏輯中進行分離。視圖被存在 resources/views 目錄下
因為這個視圖被保存在 resources/views/greeting.php,所以我們可以像這樣使用全局的輔助函數(shù) view 來返回
Route::get('/', function () { return view('greeting', ['鍵' => '值']); });//view 輔助函數(shù)的第一個參數(shù)會對應(yīng)到 resources/views 目錄內(nèi)視圖文件的名稱;傳遞到 view 輔助函數(shù)的第二個參數(shù)是一個能夠在視圖內(nèi)取用的數(shù)據(jù)數(shù)組
視圖文件也可以被存放在 resources/views 的子目錄內(nèi)。. (小數(shù)點)的表示法可以被用來表示在子目錄內(nèi)的視圖文件
return view('home.user.index', $data);
判斷視圖文件是否存在
view()->exists('emails.customer')//在視圖文件存在時返回 true
return view('greetings', ['name' => 'Victoria']);//傳遞一個數(shù)組的數(shù)據(jù)給視圖
$view = view('greeting')->with('name', 'Victoria');//使用 with 來傳遞額外數(shù)據(jù)給視圖

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

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