Laravel - 5.3 ミドルウェア実行プロセスへの大きな変更!
伊谢尔伦
伊谢尔伦 2017-05-16 16:49:21
0
2
739

中国では誰も最新バージョンを使用していませんが、この論理的な変更に気づきませんでしたか?コンストラクターでユーザーのログインを確認しませんでしたか (気づかなかったら大変です)。
この公式返信を読むのを手伝ってください: https://github.com/laravel/fr...
**私の英語は上手ではありません。説明してください! laravel5.3 の非常に重要な改善
なぜこれを行うのですか?
新しいロジックはどのように作成すればよいですか? **
この改善が必要な理由と、ロジックを解決する方法!

これで __construct が無効になるとは思えません
ミドルウェア以外のミドルウェアを属性としてミドルウェアに追加する方が合理的です。
protected $without =['login','register','oauth_callback'];
Tangled: これを追加するのは不合理に感じます (複数のグループがこれを呼び出すと不合理になるでしょう)。これを追加せず、1 つのグループに対して作成します。 login_ _construct はまた気分が悪くなった!

現在の回答: 1 階のものは実際には問題ありませんが、こちらの方がはるかにエレガントです
CallAction の説明: https://laravel.com/api/maste...

とにかく最新のLaravel 5.3は毎回アップデートされています
現在はミドルウェア、コントローラー、コンストラクターの3つです
コンストラクターでインスタンス化する必要がある関数は2つあります。また、ログインする必要があります。ログインせずにインスタンス化することはできません。
コンストラクター:

ミドルウェア:

方法:

出力:


ルート中


カスタムミドルウェア

laravelの論理出力によると:
2 コンストラクター
1 ミドルウェア
3 これはプロモーションです

ただし、この場合、コンストラクターはログインせずにインスタンス化され、ミドルウェアがどこに配置されても、最初にコンストラクターが実行され、次にミドルウェアが実行されます。
私が望む結果は次のとおりです:
1 つのミドルウェア、ログインを決定、ジャンプなし。ログイン後
2ログイン後にインスタンス化されるコンストラクター
3これはプロモーションです。プロモーションを実行します!
ロジックを変更するにはどうすればよいですか? ログインしていない場合は、ログインする必要があります (登録とログインを除く)。

おそらく問題は、Laravel が最初にコンストラクターを実行し、その後ミドルウェアを呼び出す必要があることです。
それでは、要件を達成するにはどのようなロジックを使用すればよいでしょうか?

リーリー

これら 2 つの一般的なものは、通常、__construct で記述されます。

常識的には、ルーターに定義されている場合、判定クラスにこのメソッドがあり、この時点でミドルウェアが呼び出され、次にコンストラクターが実行され、メソッドが実行されます。どうしてそのようなプロセスが起こるのでしょうか!


大まかなメソッドの問題については、以下を参照してください (コンストラクターでジャンプすることはできませんし、laravel で echo と exit を書くのは非常に醜いものになります。とにかく、私はそれを我慢できません。上記のデモは純粋に見るためのものです!)

http://laravelacademy.org/pos...
よく考えてみると、これはオブジェクト指向の責任分離の要件を完全に破壊し、結合度を向上させることに成功していることがわかりました
この文のせいで、私はこう思いましたミドルウェアを使おう! (どっちがいいの?初心者なので言い方もわかりません!)


Laravel 5.3 はミドルウェアを構築する -> コントローラーの構築 -> ミドルウェア ハンドルの実行 -> コントローラーの実行 -> なので、ミドルウェアはコンストラクターの後に実行されます。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(2)
迷茫

中国では最新バージョン5.3を使用しています

5.3は確かにミドルウェアの実装ロジックを変更しました

路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action

個人的には、コントローラーのコンストラクターでメソッドを初期化することは、ミドルウェア呼び出しを使用する以外には推奨されません。

重写 CallAction 在 CallAction中逻辑判断

どのルートのマッチングでもCallActionを使用してコントローラー内のメソッドを呼び出すためです

5.3 より前のバージョンでは、最初にミドルウェアが実行され、その後コントローラーが初期化されます。これが 5.3 との最大の違いです。

いいねを押す +0
淡淡烟草味

コンストラクターが最初に実行されるはずなので、何も問題ないようです。 。 。

laravel5.3のドキュメントを調べたところ、構築後にミドルウェアが実行されるようになりました。他の下位バージョンに切り替えるか、ミドルウェアを使用しないか、元のコンストラクターによって呼び出されるすべてのメソッドをミドルウェア内に記述します。 。

例: (注: この機能にはlaravelバージョン5.3.4以降が必要です)

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!