国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
控制器介紹
基礎(chǔ)控制器
控制器中間件
資源型控制器
部分資源路由" >部分資源路由
嵌套資源
命名資源路由
命名資源路由參數(shù)
限定范圍的資源路由
本地化資源 URI" >本地化資源 URI
補(bǔ)充資源控制器
依賴注入 & 控制器
路由緩存" >路由緩存
首頁 php框架 Laravel 什么叫l(wèi)aravel控制器

什么叫l(wèi)aravel控制器

Jan 14, 2023 am 11:16 AM
php laravel 控制器

在laravel中,控制器(Controller)是一個(gè)類,用于實(shí)現(xiàn)一定的功能;控制器能將相關(guān)的請求處理邏輯組成一個(gè)單獨(dú)的類。控制器中存放中一些方法,實(shí)現(xiàn)一定的功能,通過路由調(diào)用控制器,不再使用回調(diào)函數(shù);控制器被存放在“app/Http/Controllers”目錄中。

什么叫l(wèi)aravel控制器

本教程操作環(huán)境:windows7系統(tǒng)、Laravel6版,DELL G3電腦。

控制器介紹

1、控制器是什么?

為了替代在路由文件中以閉包形式定義的所有的請求處理邏輯,你可能想要使用控制類來組織這些行為??刂破髂軐⑾嚓P(guān)的請求處理邏輯組成一個(gè)單獨(dú)的類。

Controller,是類,用于實(shí)現(xiàn)一定的功能,控制器中存放中一些方法,實(shí)現(xiàn)一定的功能,通過路由調(diào)用控制器,不再使用回調(diào)函數(shù)。

2、控制器寫在哪里?

App/Http/Controllers放置控制器

Controller.php是父類文件,別的控制器可以繼承

3、控制器文件如何命名?

大駝峰的控制器名 Controller.php

例如AddDataController.php LoginController.php

4、控制器結(jié)構(gòu)怎么寫?

通過artisan命令自動(dòng)生成,例如:確保在當(dāng)前項(xiàng)目的根目錄,命令行輸入:

php artisan make:controller TestController

結(jié)構(gòu)代碼自動(dòng)完成,

   namespace App\Http\Controller;
   use Illuminate\Http\Request;    
   class TestController extends  Controller{
     //
   }

基礎(chǔ)控制器

定義控制器

下面是一個(gè)基礎(chǔ)控制器類的例子。需要注意的是,該控制器繼承了 Laravel 的基礎(chǔ)控制器。該類控制器提供了一些便利的方法,比如 ?middleware 方法,該方法可以為控制器行為添加中間件:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;

class UserController extends Controller
{
    /**
     * 顯示指定用戶的簡介
     *
     * @param  int  $id
     * @return \Illuminate\View\View
     */
    public function show($id)
    {
        return view(&#39;user.profile&#39;, [&#39;user&#39; => User::findOrFail($id)]);
    }
}

你可以像這樣定義一個(gè)指向控制器行為的路由:

use App\Http\Controllers\UserController;

Route::get(&#39;user/{id}&#39;, [UserController::class, &#39;show&#39;]);

當(dāng)一個(gè)請求與指定路由的 URI 匹配時(shí), UserController 控制器中的 show 方法將會(huì)執(zhí)行。路由參數(shù)也將會(huì)被傳遞給該方法。

技巧:控制器并不是 必需 繼承基礎(chǔ)類。如果控制器沒有繼承基礎(chǔ)類,你將無法使用一些便捷的功能,比如 middleware,validate,和 dispatch 方法。

單行為控制器

如果你想要定義一個(gè)只處理單個(gè)行為的控制器,你可以在控制器中放置一個(gè) __invoke 方法:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;

class ShowProfile extends Controller
{
    /**
     * 顯示指定用戶的簡介
     *
     * @param  int  $id
     * @return \Illuminate\View\View
     */
    public function __invoke($id)
    {
        return view(&#39;user.profile&#39;, [&#39;user&#39; => User::findOrFail($id)]);
    }
}

當(dāng)注冊單個(gè)行為控制器的路由時(shí)不需要指名方法:

use App\Http\Controllers\ShowProfile;

Route::get(&#39;user/{id}&#39;, ShowProfile::class);

你可以通過 Artisan 命令工具里的 make:controller 命令中的 --invokable 選項(xiàng)來生成一個(gè)可調(diào)用的控制器

php artisan make:controller ShowProfile --invokable

技巧:可以使用 stub 定制 自定義控制器模板

控制器中間件

中間件 可以在路由文件中分配給控制器的路由:

Route::get(&#39;profile&#39;, [UserController::class, &#39;show&#39;])->middleware(&#39;auth&#39;);

然而,在控制器的構(gòu)造函數(shù)中指定中間件更為方便。使用控制器構(gòu)造函數(shù)中的 middleware 方法,可以輕松地將中間件分配給控制器。你甚至可以將中間件限制為只在控制器中的某些方法生效:

class UserController extends Controller
{
    /**
     * 實(shí)例化一個(gè)新的控制器實(shí)例
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(&#39;auth&#39;);

        $this->middleware(&#39;log&#39;)->only(&#39;index&#39;);

        $this->middleware(&#39;subscribed&#39;)->except(&#39;store&#39;);
    }
}

同時(shí),控制器還允許你使用一個(gè)閉包來注冊中間件。這為不定義整個(gè)中間件類的情況下為單個(gè)控制器定義中間件提供了一種便捷的方法:

$this->middleware(function ($request, $next) {
    // ...

    return $next($request);
});

技巧:你可以將中間件分配給控制器操作的一個(gè)子集。然而,它可能表明你的控制器正在變得復(fù)雜。建議你將控制器拆分為多個(gè)較小的控制器。

資源型控制器

Laravel 的資源路由通過單行代碼即可將典型的「CURD (增刪改查)」路由分配給控制器。例如,你希望創(chuàng)建一個(gè)控制器來處理保存 “照片” 應(yīng)用的所有 HTTP 請求。使用 Artisan 命令 make:controller 可以快速創(chuàng)建這樣一個(gè)控制器:

php artisan make:controller PhotoController --resource

這個(gè)命令將會(huì)生成一個(gè)控制器 app/Http/Controllers/PhotoController.php。 其中包括每個(gè)可用資源操作的方法。

接下來,你可以給控制器注冊一個(gè)資源路由:

Route::resource(&#39;photos&#39;, PhotoController::class);

這個(gè)單一的路由聲明創(chuàng)建了多個(gè)路由來處理資源上的各種行為。生成的控制器為每個(gè)行為保留了方法,包括了關(guān)于處理 HTTP 動(dòng)詞和 URLs 的聲明注釋。

你可以通過將數(shù)組傳參到 resources 方法中的方式來一次性的創(chuàng)建多個(gè)資源控制器:

Route::resources([
    &#39;photos&#39; => PhotoController::class,
    &#39;posts&#39; => PostController::class,
]);

資源控制器操作處理

VerbURIActionRoute Name
GET/photosindexphotos.index
GET/photos/createcreatephotos.create
POST/photosstorephotos.store
GET/photos/{photo}showphotos.show
GET/photos/{photo}/editeditphotos.edit
PUT/PATCH/photos/{photo}updatephotos.update
DELETE/photos/{photo}destroyphotos.destroy

指定資源模型

如果你使用了路由模型綁定,并且想在資源控制器的方法中使用類型提示,你可以在生成控制器的時(shí)候使用 --model 選項(xiàng):

php artisan make:controller PhotoController --resource --model=Photo

當(dāng)聲明資源路由時(shí),你可以指定控制器處理的部分行為,而不是所有默認(rèn)的行為:

Route::resource(&#39;photos&#39;, PhotoController::class)->only([
    &#39;index&#39;, &#39;show&#39;
]);

Route::resource(&#39;photos&#39;, PhotoController::class)->except([
    &#39;create&#39;, &#39;store&#39;, &#39;update&#39;, &#39;destroy&#39;
]);

API 資源路由

當(dāng)聲明用于 APIs 的資源路由時(shí),通常需要排除顯示 HTML 模板的路由(如 createedit )。為了方便起見,你可以使用 apiResource 方法自動(dòng)排除這兩個(gè)路由:

Route::apiResource(&#39;photos&#39;, PhotoController::class);

你也可以傳遞一個(gè)數(shù)組給 apiResources 方法來同時(shí)注冊多個(gè) API 資源控制器:

Route::apiResources([
    &#39;photos&#39; => PhotoController::class,
    &#39;posts&#39; => PostController::class,
]);

要快速生成不包含 createedit 方法的用于開發(fā)接口的資源控制器,請?jiān)趫?zhí)行 make:controller 命令時(shí)使用 --api 參數(shù):

php artisan make:controller API/PhotoController --api

嵌套資源

有時(shí)可能需要定義一個(gè)嵌套的資源型路由。例如,照片資源可能被添加了多個(gè)評論。那么可以在路由中使用 “點(diǎn)” 符號(hào)來聲明資源型控制器:

Route::resource(&#39;photos.comments&#39;, PhotoCommentController::class);

該路由會(huì)注冊一個(gè)嵌套資源,可以使用如下 URI 訪問:

/photos/{photo}/comments/{comment}

限定嵌套資源的范圍

Laravel 的 隱式模型綁定 特性可以自動(dòng)限定嵌套綁定的范圍,因此已解析的子模型會(huì)自動(dòng)屬于父模型。定義嵌套路由時(shí),使用 scoped 方法,可以開啟自動(dòng)范圍限定,也可以指定 Laravel 應(yīng)該按照哪個(gè)字段檢索子模型資源

Route::resource(&#39;photos.comments&#39;, PhotoCommentController::class)->scoped([
    &#39;comment&#39; => &#39;slug&#39;,
]);

這個(gè)路由會(huì)注冊一個(gè)限定范圍的嵌套資源路由,可以像下面這樣來訪問:

/photos/{photo}/comments/{comment:slug}

淺層嵌套

通常,并不完全需要在 URI 中同時(shí)擁有父 ID 和子 ID ,因?yàn)樽?ID 已經(jīng)是唯一的標(biāo)識(shí)符。當(dāng)使用唯一標(biāo)識(shí)符(如自動(dòng)遞增的主鍵)來標(biāo)識(shí) URI 中的模型時(shí),可以選擇使用「淺嵌套」的方式定義路由:

Route::resource(&#39;photos.comments&#39;, CommentController::class)->shallow();

上面的路由定義方式會(huì)定義以下路由:

HTTP 方式URI行為路由名稱
GET/photos/{photo}/commentsindexphotos.comments.index
GET/photos/{photo}/comments/createcreatephotos.comments.create
POST/photos/{photo}/commentsstorephotos.comments.store
GET/comments/{comment}showcomments.show
GET/comments/{comment}/editeditcomments.edit
PUT/PATCH/comments/{comment}updatecomments.update
DELETE/comments/{comment}destroycomments.destroy

命名資源路由

默認(rèn)情況下,所有的資源控制器行為都有一個(gè)路由名稱。你可以傳入 names 數(shù)組來覆蓋這些名稱:

Route::resource(&#39;photos&#39;, PhotoController::class)->names([
    &#39;create&#39; => &#39;photos.build&#39;
]);

命名資源路由參數(shù)

默認(rèn)情況下,Route::resource 會(huì)根據(jù)資源名稱的「單數(shù)」形式創(chuàng)建資源路由的路由參數(shù)。你可以在選項(xiàng)數(shù)組中傳入 parameters 參數(shù)來輕松地覆蓋每個(gè)資源。parameters 數(shù)組應(yīng)該是資源名稱和參數(shù)名稱的關(guān)聯(lián)數(shù)組:

Route::resource(&#39;users&#39;, AdminUserController::class)->parameters([
    &#39;users&#39; => &#39;admin_user&#39;
]);

上例將會(huì)為資源的 show 路由生成如下的 URI :

/users/{admin_user}

限定范圍的資源路由

有時(shí),在定義資源路由時(shí)隱式綁定了多個(gè) Eloquent 模型,你希望限定第二個(gè) Eloquent 模型必須為第一個(gè) Eloquent 模型的子模型。例如,考慮這樣一個(gè)場景,通過 slug 檢索某個(gè)特殊用戶的一篇文章:

use App\Http\Controllers\PostsController;Route::resource(&#39;users.posts&#39;, PostsController::class)->scoped();

你可以通過給 scoped 方法傳遞一個(gè)數(shù)組來覆蓋默認(rèn)的模型路由鍵:

use App\Http\Controllers\PostsController;Route::resource(&#39;users.posts&#39;, PostsController::class)->scoped([
    &#39;post&#39; => &#39;slug&#39;,
]);

當(dāng)使用一個(gè)自定義鍵的隱式綁定作為嵌套路由參數(shù)時(shí),Laravel 會(huì)自動(dòng)限定查詢范圍,按照約定的命名方式去父類中查找關(guān)聯(lián)方法,然后檢索到對應(yīng)的嵌套模型。在這種情況下,將假定 User 模型有一個(gè)叫 posts(路由參數(shù)名的復(fù)數(shù))的關(guān)聯(lián)方法,通過這個(gè)方法可以檢索到 Post 模型。

默認(rèn)情況下,Route::resource 將會(huì)用英文動(dòng)詞創(chuàng)建資源 URI。如果需要自定義 createedit 行為的動(dòng)作名,可以在 AppServiceProviderboot 中使用 Route::resourceVerbs 方法實(shí)現(xiàn):

use Illuminate\Support\Facades\Route;

/**
 * 引導(dǎo)任何應(yīng)用服務(wù)。
 *
 * @return void
 */
public function boot()
{
    Route::resourceVerbs([
        &#39;create&#39; => &#39;crear&#39;,
        &#39;edit&#39; => &#39;editar&#39;,
    ]);
}

動(dòng)作被自定義后,像 Route::resource(&#39;fotos&#39;, &#39;PhotoController&#39;) 這樣注冊的資源路由將會(huì)產(chǎn)生如下的 URI:

/fotos/crear

/fotos/{foto}/editar

補(bǔ)充資源控制器

如果您需要增加額外的路由到默認(rèn)的資源路由之中,您需要在 Route::resource 前定義它們;否則, resource 方法定義的路由可能會(huì)無意間優(yōu)先于您定義的路由:

Route::get('photos/popular', [PhotoController::class, 'popular']);

Route::resource(&#39;photos&#39;, PhotoController::class);

技巧:記得保持您的控制器的專一性。如果您需要典型的資源操作以外的方法,請考慮將您的控制器分割為兩個(gè)更小的控制器。

依賴注入 & 控制器

構(gòu)造注入

Laravel 服務(wù)容器 被用于解析所有的 Laravel 控制器。因此,您可以在控制器的構(gòu)造函數(shù)中使用類型提示需要的依賴項(xiàng)。聲明的解析會(huì)自動(dòng)解析并注入到控制器實(shí)例中去:

<?php

namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
    /**
     * 用戶 repository 實(shí)例。
     */
    protected $users;

    /**
     * 創(chuàng)建一個(gè)新的控制器實(shí)例。
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
}

您亦可類型提示 Laravel 契約 ,只要它能夠被解析。取決于您的應(yīng)用,注入依賴到控制器可能會(huì)提供更好的可測試性。

方法注入

除了構(gòu)造器注入以外,您亦可在控制器方法中類型提示依賴。最常見的用法便是注入 Illuminate\Http\Request 到您的控制器方法中:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 保存一個(gè)新用戶。
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $name = $request->name;

        //
    }
}

如果您的控制器方法要從路由參數(shù)中獲取輸入內(nèi)容,請?jiān)谀囊蕾図?xiàng)之后列出您的路由參數(shù)。例如,您可以像下方這樣定義路由:

Route::put(&#39;user/{id}&#39;, [UserController::class, &#39;update&#39;]);

如下所示,您依然可以類型提示 Illuminate\Http\Request 并通過定義您的控制器方法訪問 id 參數(shù):

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 修改指定的用戶。
     *
     * @param  Request  $request
     * @param  string  $id
     * @return Response
     */
    public function update(Request $request, $id)
    {
        //
    }
}

如果您的應(yīng)用僅使用了基于路由的控制器,您應(yīng)該充分利用 Laravel 路由緩存。使用路由緩存將會(huì)大幅降低您的應(yīng)用路由的注冊時(shí)間。有時(shí),您的路由注冊的速度可能會(huì)提高 100 倍。要生成路由緩存,僅需執(zhí)行 route:cache Artisan 命令:

php artisan route:cache

在運(yùn)行該命令后,每次請求將會(huì)加載您緩存的路由文件。請記住,您每次添加新路由后均需要生成新的路由緩存。因此,您應(yīng)該在項(xiàng)目部署時(shí)才運(yùn)行 route:cache 命令。

您亦可使用 route:clear 來清除路由緩存:

php artisan route:clear

【相關(guān)推薦:laravel視頻教程

以上是什么叫l(wèi)aravel控制器的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

如何設(shè)置PHP時(shí)區(qū)? 如何設(shè)置PHP時(shí)區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

如何防止PHP中的跨站點(diǎn)偽造偽造(CSRF)攻擊? 如何防止PHP中的跨站點(diǎn)偽造偽造(CSRF)攻擊? Jun 28, 2025 am 02:25 AM

TopreventCSRFattacksinPHP,implementanti-CSRFtokens.1)Generateandstoresecuretokensusingrandom_bytes()orbin2hex(random_bytes(32)),savethemin$_SESSION,andincludetheminformsashiddeninputs.2)ValidatetokensonsubmissionbystrictlycomparingthePOSTtokenwiththe

如何升級(jí)PHP版本? 如何升級(jí)PHP版本? Jun 27, 2025 am 02:14 AM

升級(jí)PHP版本其實(shí)不難,但關(guān)鍵在于操作步驟和注意事項(xiàng)。以下是具體方法:1.確認(rèn)當(dāng)前PHP版本及運(yùn)行環(huán)境,使用命令行或phpinfo.php文件查看;2.選擇適合的新版本并安裝,推薦8.2或8.1,Linux用戶用包管理器安裝,macOS用戶用Homebrew;3.遷移配置文件和擴(kuò)展,更新php.ini并安裝必要擴(kuò)展;4.測試網(wǎng)站是否正常運(yùn)行,檢查錯(cuò)誤日志確保無兼容性問題。按照這些步驟操作,大多數(shù)情況都能順利完成升級(jí)。

PHP初學(xué)者指南:當(dāng)?shù)丨h(huán)境配置的詳細(xì)說明 PHP初學(xué)者指南:當(dāng)?shù)丨h(huán)境配置的詳細(xì)說明 Jun 27, 2025 am 02:09 AM

要設(shè)置PHP開發(fā)環(huán)境,需選擇合適的工具并正確安裝配置。①最基礎(chǔ)的PHP本地環(huán)境需要三個(gè)組件:Web服務(wù)器(Apache或Nginx)、PHP本身和數(shù)據(jù)庫(如MySQL/MariaDB);②推薦初學(xué)者使用集成包如XAMPP或MAMP,它們簡化了安裝流程,XAMPP適用于Windows和macOS,安裝后將項(xiàng)目文件放入htdocs目錄并通過localhost訪問;③MAMP適合Mac用戶,支持便捷切換PHP版本,但免費(fèi)版功能有限;④高級(jí)用戶可用Homebrew手動(dòng)安裝,在macOS/Linux系統(tǒng)中

緩存策略|優(yōu)化Laravel性能 緩存策略|優(yōu)化Laravel性能 Jun 27, 2025 pm 05:41 PM

cachinginlaravelsimimprovesapplicationperformancebyreducingdatabasequeries andminimizingredementProcessing.tousecachingscachingscachingscaching foldtheSesteps:1.1.useroutecachingforstaticrouteswithpaticrouteswithphphparpartisanroute:cache cache cache,pood forpublpubliCpageSlike/ailo ofbroublike

如何使用PHP退出功能? 如何使用PHP退出功能? Jul 03, 2025 am 02:15 AM

exit()是PHP中用于立即終止腳本執(zhí)行的函數(shù),常見用途包括:1.在檢測到異常情況時(shí)提前終止腳本,如文件不存在或驗(yàn)證失??;2.調(diào)試時(shí)輸出中間結(jié)果并停止執(zhí)行;3.結(jié)合header()重定向后調(diào)用exit()防止后續(xù)代碼執(zhí)行;此外,exit()可接受字符串參數(shù)作為輸出內(nèi)容或整數(shù)作為狀態(tài)碼,其別名為die()。

如何將兩個(gè)PHP陣列組合獨(dú)特的值? 如何將兩個(gè)PHP陣列組合獨(dú)特的值? Jul 02, 2025 pm 05:18 PM

要合并兩個(gè)PHP數(shù)組并保留唯一值,有兩種主要方法。1.對于索引數(shù)組或僅需值去重的情況,使用array_merge和array_unique組合:先用array_merge($array1,$array2)合并數(shù)組,再用array_unique()去重,最終得到包含所有唯一值的新數(shù)組;2.對于關(guān)聯(lián)數(shù)組且希望保留第一個(gè)數(shù)組中的鍵值對時(shí),使用 運(yùn)算符:$result=$array1 $array2,這將確保第一個(gè)數(shù)組中的鍵不會(huì)被第二個(gè)數(shù)組覆蓋。這兩種方法分別適用于不同場景,根據(jù)是否需要保留鍵名或只關(guān)注

PHP本地開發(fā)環(huán)境設(shè)置:最簡單的方法 PHP本地開發(fā)環(huán)境設(shè)置:最簡單的方法 Jun 26, 2025 am 01:12 AM

tosetupalocalphpdevelopmentenvironmentsquickly,usexamppforsimplicity.1.DownloadAndAndAndInstallXamppForyouRos.2.startapacheandmysqlv IATHEXAMPPCONTROLPANEL.3.PLACEPHPFILESINTHEHTDOCSFOLDERTOACCESSTHEMATHTP://localhost/your-folder-name.4.4.4.4.4.formacos,Considermam

See all articles