ホームページ > バックエンド開発 > PHPチュートリアル > Container Eventコンテナイベントに基づくLaravel WEB APP

Container Eventコンテナイベントに基づくLaravel WEB APP

WBOY
リリース: 2016-06-23 13:07:44
オリジナル
1278 人が閲覧しました

注: この記事では主に Laravel コンテナ イベントについて説明し、コンテナ イベントの理解を深めるためにコンテナ イベントに基づいた簡単なデモも作成します。同時に、作成者は開発プロセス中にいくつかのスクリーンショットとコードを貼り付けて、読み取り効率を向上させます。

コンテナは Laravel フレームワークの中核であり、さまざまなサービスがコンテナに保存され、各サービスはサービス プロバイダーを通じてコン​​テナに登録されます。これは、コンテナから必要なサービス オブジェクトを解析するのに役立ちます。このプロセス中、コンテナがコンテナからオブジェクトを解析するたびにイベントがトリガーされ、解決メソッドを通じて監視できます。実際、この優れたツールは、Laravel フレームワークでのフォーム リクエストの検証に使用されます。フォーム コンテンツの検証は、コントローラーにロジックを配置してコントローラーを混乱させることを避けるために、フォーム リクエスト クラスを通じて実装されます。詳細については、中国語のドキュメント「フォーム リクエストの検証」を参照してください。 。コンテナ イベントの詳細については、ドキュメント「コンテナ イベント」を参照してください。

フォームリクエストでのコンテナイベントの適用

最初にルートを書く:

Route::post('containerevent', 'ContainerEventController@containerEvent');Route::post('formrequest', 'ContainerEventController@formRequest');Route::get('container', 'ContainerEventController@profile');
ログイン後にコピー

次にコントローラーを構築する:

php artisan make:controller ContainerEventController
ログイン後にコピー

メソッドを書く:

    public function containerEvent()    {                }    public function formRequest()    {    }    public function profile()    {        return view('profile');    }
ログイン後にコピー

ビューを書く:

<html lang="en">    <head>        <meta charset="utf-8">        <meta http-equiv="X-UA-Compatible" content="IE=edge">        <meta name="viewport" content="width=device-width, initial-scale=1">        <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->        <title>Bootstrap Template</title>        <!-- 新 Bootstrap 核心 CSS 文件 -->        <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">        <style>            html,body{                width: 100%;                height: 100%;            }            *{                margin: 0;                border: 0;            }        </style>    </head>    <body>        <div class="container">            <div class="row">                <div class="col-xs-12 col-md-12">                    <form action="/formrequest" method="post" accept-charset="UTF-8" enctype="multipart/form-data">                        <div class="form-group">                            <label for="name">Name</label>                            <input type="text" class="form-control" id="name" name="name" placeholder="Name">                        </div>                        <div class="form-group">                            <label for="age">Age</label>                            <input type="text" class="form-control" id="age" name="age" placeholder="Age">                        </div>                        <button type="submit" class="btn btn-default">Submit</button>                    </form>                </div>            </div>        </div>        <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->        <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>        <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->        <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>        <script>        </script>    </body></html>
ログイン後にコピー

フォームリクエストクラスを書く: コマンドを入力最初にフォームリクエストクラスを生成します

php artisan make:request ContainerFormRequest
ログイン後にコピー

検証ルールを与えます

class ContainerFormRequest extends Request{    /**     * Determine if the user is authorized to make this request.     *     * @return bool     */    public function authorize()    {        return true;//改为true,这里一般用作用户验证,这里全部通过验证    }    /**     * Get the validation rules that apply to the request.     *     * @return array     */    public function rules()    {        return [            'name' => 'required',            'age'  => 'required|numeric|min:18',        ];    }}
ログイン後にコピー

ContainerEventController:

public function formRequest(ContainerFormRequest $containerFormRequest){        dd('This is a From Request Container Event. It is working!!!');}
ログイン後にコピー
を変更します

同時に、app/Http/Kernel.php ファイル内の AppHttpMiddlewareVerifyCsrfToken::class をキャンセルします。そうしないと、TokenMismatchException エラーが発生します。フォームを送信するとき。

OK、ルートを入力します (ルートに変更します): http://laravelcontainerevent.app:8888/container 入力フォームが送信されると、フォームは現在のフォーム ページに戻ります。正しく実行されると、次のように出力されます。

説明 fromRequest はすでに動作しています。ContainerFormRequest オブジェクトがコンテナから解析されると、authorize メソッドと rules メソッドが最初に動作します。 ContainerFormRequest オブジェクトをコントローラーに挿入するだけで済みます。

デモ

フォーム送信と同じ機能を実現するカスタム クラスを実装します。 app/Contracts フォルダーに新しい EventBeforeResolve.php ファイルを作成します:

namespace App\Contracts;interface EventBeforeResolving{    public function isAdult();}
ログイン後にコピー

そしてサービス プロバイダーに登録します:

//AppServiceProvider.php/**     * Register any application services.     *     * @return void     */    public function register()    { //当从容器中解析注入到控制器中前,会先调用实现EventBeforeResolving接口对象的isAdult()方法        $this->app->resolving(EventBeforeResolving::class,function($obj, $app){            $obj->isAdult();        });    }
ログイン後にコピー

このインターフェースを実装するサービスを作成します:

//app/Services/Authorize.phpnamespace App\Services;use App\Contracts\EventBeforeResolving;use Illuminate\Http\Request;class Authorize implements EventBeforeResolving{    private $request;    public function __construct(Request $request)    {        $this->request = $request;    }    public function isAdult()    {        $name = $this->request->input('name');        $age = $this->request->input('age');        if(empty($name) || empty($age) || ($age < 18)){            dd('Name and Age must be required. And Age must be above 18');        }    }}
ログイン後にコピー

ContainerEventController を変更します:

    public function containerEvent(Authorize $authorize)    {        dd('This is a Demo Container Event. It is working!!!');    }
ログイン後にコピー

また、忘れないでくださいこれを変更するには、profile.blade.php ファイルの Form submit action='/containereven' を使用します。

間違った入力が行われると、エラー メッセージが表示されます:

コンテナ イベントは、サービス オブジェクトが解析されてコンテナから挿入される前にトリガーされるイベントです。この関数を使用すると、興味深い便利な機能を作成できます。 Laravel フレームワークの形式など、検証ロジック コードがコントローラーに配置されてコントローラーが乱雑になることがないように、このようにしてリクエストの検証が行われます。

概要: このセクションでは主に Laravel のコンテナ イベントについて説明し、フォーム リクエストを例として使用してその使用法を説明します。同時に、小さなデモを使用してコンテナ イベントを設定および監視する方法を段階的に説明します。さて、2日後にはLaravelのTask Scheduledタスクスケジュールに基づいて新しい章を始めたいと思います。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート