Các Laravel 5 documentation mô tả hai cách để gán Middleware:Thực hiện theo thứ tự của Middleware trong Laravel 5
- Gán middleware để định tuyến của bộ điều khiển.
- Chỉ định phần mềm trung gian trong bộ khởi tạo của trình điều khiển của bạn.
Tuy nhiên, tôi nhận ra rằng bất kỳ mã viết bằng các bộ điều khiển __construct()
chức năng sẽ chạy trước khi Middleware, ngay cả khi Middleware được khai báo trên dòng đầu tiên của chức năng của bộ điều khiển __construct
.
Tôi đã tìm thấy bug report cho một sự cố tương tự trong kho lưu trữ Laravel github. Tuy nhiên, một cộng tác viên đã đóng lại vấn đề nêu rõ "Đây là hành vi mong đợi".
tôi tự hỏi rằng, middleware
nên "lớp" bên ngoài ứng dụng, trong khi __construct
chức năng là một phần của ứng dụng. Tại sao chức năng __construct
được thực hiện trước phần mềm trung gian (trước đây là phần mềm trung gian) và tại sao điều này được mong đợi?
Tôi vừa thực hiện một vài thử nghiệm để xác nhận. Nếu bạn muốn phần mềm trung gian thực thi trước các bộ điều khiển '__construct()', bạn cần gán phần mềm trung gian cho tuyến. Nếu không, nó sẽ luôn luôn được thực hiện ở cuối '__construct()' ngay cả khi được gán trên dòng đầu tiên của 'construct()'. – Jeemusu
Tôi đã tạo một ví dụ nhanh để phác thảo những gì bạn mô tả, vui lòng thêm nó vào câu hỏi của bạn. https://www.notehub.org/2015/6/26/say-we-have-a-controller----welcomecontr – Jeemusu
@Jeemusu Cảm ơn bạn đã bình luận.Yup, tôi cũng phát hiện ra sự khác biệt này giữa hai cách gán phần mềm trung gian. Tuy nhiên, bằng cách đặt các middleware ở phần cuối của dòng chảy thực hiện trong các nhà xây dựng, nó là chống lại Yêu cầu Vòng đời (http://laravel.com/docs/5.1/lifecycle), kể từ khi công văn đề nghị nên có kết thúc? –