Laravel - 5.3 perubahan besar pada proses pelaksanaan middleware!
伊谢尔伦
伊谢尔伦 2017-05-16 16:49:21
0
2
802

Tiada sesiapa di China yang menggunakan versi terkini. Tidakkah anda perasan perubahan logik ini? Adakah anda tidak menyemak log masuk pengguna dalam pembina (anda menghadapi masalah jika anda tidak perasan)?
Bantu saya membaca jawapan rasmi ini: https://github.com/laravel/fr...
**Bahasa Inggeris saya tidak bagus! sila jelaskan! Peningkatan yang sangat penting dalam laravel5.3
Mengapa anda melakukan ini?
Bagaimana saya harus menulis logik baharu? **
Sebab mengapa saya memerlukan peningkatan ini, dan bagaimana saya boleh menyelesaikan logik saya!

Saya ragu bahawa ini akan membatalkan __construct
Adalah lebih munasabah bahawa middleware kecuali perlu ditambahkan pada middleware sebagai atribut!
protected $except =['login','register','oauth_callback'];
Kusut: Rasanya tidak munasabah untuk menambah ini (adalah tidak munasabah jika berbilang kumpulan memanggil ini), jangan tambah ini dan tulis untuk satu login_ _construct berasa teruk sekali lagi!

Jawapan semasa: Yang di tingkat satu sebenarnya OK, tetapi yang ini jauh lebih elegan
Penerangan CallAction: https://laravel.com/api/maste...

Laravel 5.3, yang merupakan yang terbaharu, dikemas kini setiap kali
Kini terdapat 3, middleware, pengawal dan pembina ini
Terdapat 2 fungsi yang mesti digunakan dalam pembina. Dan ia mesti dilog masuk. Instantiation tidak dibenarkan tanpa log masuk.
Pembina:

Perisian tengah:

Kaedah:

Keluaran:


Dalam laluan


Perisian tengah tersuai

Mengikut keluaran logik laravel:
2 Pembina
1 Middleware
3 Ini adalah promosi

Tetapi dalam kes ini, pembina dibuat instantiated tanpa log masuk, dan tidak kira di mana middleware diletakkan, pembina akan dijalankan dahulu dan kemudian middleware
Hasil yang saya inginkan ialah:
1 middleware, tentukan log masuk, tiada Jump selepas log masuk
2Pembina, dibuat seketika selepas log masuk
3 Ini ialah promosi, laksanakan promosi!
Bagaimana untuk mengubah suai logik? Saya perlu log masuk sebelum menghubungi kaedah awam Jika saya tidak log masuk, saya akan melompat untuk log masuk (tidak termasuk pendaftaran dan log masuk)!

Masalah yang berkemungkinan ialah Laravel mesti menjalankan pembina terlebih dahulu, dan kemudian perisian tengah boleh dipanggil
Kemudian apakah jenis logik yang harus saya gunakan untuk mencapai keperluan saya?

$this->wx_api();
$this->agent();

Dua yang biasa ini biasanya ditulis dalam __construct!

Saya masih keliru, mengikut akal sehat, jika ia ditakrifkan dalam penghala, kelas penghakiman mempunyai kaedah ini, dan kemudian middleware dipanggil pada masa ini, dan kemudian pembina dilaksanakan, dan kemudian kaedahnya! Bagaimana proses sedemikian boleh berlaku!


Untuk masalah kaedah kasar, lihat perkara berikut (anda tidak boleh melompat dalam pembina, dan menulis gema dan keluar dalam laravel akan menjadi sangat hodoh. Bagaimanapun, saya tidak tahan. Demonstrasi di atas adalah semata-mata untuk tontonan!)

http://laravelacademy.org/pos...
Setelah memikirkannya dengan teliti, saya mendapati bahawa ini dengan sempurna memusnahkan keperluan pemisahan tanggungjawab berorientasikan objek dan berjaya meningkatkan tahap gandingan
Disebabkan ayat ini, saya fikir Gunakan perisian tengah! (Yang mana lebih baik? Saya seorang pemula dan saya tidak tahu bagaimana untuk mengatakannya!)


Laravel 5.3 ialah kaedah membina Middleware -> Melaksanakan pemegang middleware -> Pengawal Pelaksana ->

伊谢尔伦
伊谢尔伦

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

membalas semua(2)
迷茫

Saya menggunakan versi 5.3 terbaharu di China

5.3 sememangnya telah mengubah logik pelaksanaan middleware

Padanan laluan - baca perisian tengah laluan - buat instantiate Pengawal - baca kunci tengah Pengawal - jalankan perisian tengah - laksanakan tindakan路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action

个人不鼓励在Controller的构造函数中初始化方法,除了使用中间件调用之外,不要做任何逻辑判断的事情。

重写 CallAction 在 CallAction中逻辑判断

因为任何一个路由的匹配都会使用CallAction

Secara peribadi, tidak digalakkan untuk memulakan kaedah dalam pembina Pengawal Jangan lakukan sebarang pertimbangan logik kecuali menggunakan panggilan perisian tengah.

Tulis semula CallAction untuk membuat pertimbangan logik dalam CallAction

Oleh kerana mana-mana padanan laluan akan menggunakan CallAction untuk memanggil kaedah dalam Pengawal🎜 🎜🎜Dalam versi di bawah 5.3, perisian tengah akan dilaksanakan terlebih dahulu, dan kemudian Pengawal akan dimulakan Ini adalah perbezaan terbesar daripada 5.3. 🎜🎜
淡淡烟草味

Pembina harus dilaksanakan terlebih dahulu, jadi nampaknya tidak ada yang salah dengannya. . .

Saya melihat melalui dokumentasi laravel5.3 Kini middleware dilaksanakan selepas pembinaan sama ada anda bertukar kepada versi lain yang lebih rendah, atau anda tidak menggunakan middleware, atau anda menulis semua kaedah untuk dipanggil oleh pembina asal anda dalam middleware. .

Sebagai contoh: (Nota: Ciri ini memerlukan laravel versi 5.3.4 ke atas)

public function __construct() {

    $this->middleware(function ($request, $next) {
        $this->wx_api();
        return $next($request);
    });
}

public function wx_api () {
    
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan