Laravel - 5.3에서는 미들웨어 실행 프로세스가 크게 변경되었습니다!
伊谢尔伦
伊谢尔伦 2017-05-16 16:49:21
0
2
782

중국에서는 최신 버전을 사용하는 사람이 아무도 없습니다. 이런 논리적인 변화를 눈치채지 못하셨나요? 생성자에서 사용자의 로그인도 확인하지 않는다(알지 못했다면 곤란하다)?
공식 답변을 읽을 수 있도록 도와주세요: https://github.com/laravel/fr...
**제 영어 실력이 부족해요! 설명 해주십시오! laravel5.3의 매우 중요한 개선 사항
이 작업을 수행하는 이유는 무엇입니까?
새로운 로직은 어떻게 작성해야 하나요? **
이 개선이 필요한 이유와 논리를 어떻게 해결할 수 있는지!

이렇게 하면 __construct가 무효화될지 의심스럽습니다
그렇다면 미들웨어 제외를 미들웨어에 속성으로 추가하는 것이 더 합리적입니다!
protected $Exception =['login','register','oauth_callback'];
Tangled: 이것을 추가하는 것은 무리인 것 같습니다(여러 그룹에서 이것을 호출하면 무리일 것입니다). 이것을 추가하지 말고 하나를 위해 작성하십시오. login_ _construct가 또 기분이 나빠졌어요!

현재 답변: 사실 1층에 있는 것도 괜찮은데 이게 훨씬 더 우아해요
CallAction 설명: https://laravel.com/api/maste...

어차피 최신 버전인 Laravel 5.3은 매번 업데이트됩니다!
이제 미들웨어, 컨트롤러, 생성자 3가지가 있습니다.
생성자에서 인스턴스화해야 하는 함수는 2가지입니다. 그리고 로그인이 되어 있어야 합니다. 로그인 없이 인스턴스화는 허용되지 않습니다.
건축자:

미들웨어:

방법:

출력:


경로에서


맞춤형 미들웨어

laravel의 논리 출력에 따르면:
2 생성자
1 미들웨어
3 이것은 프로모션입니다

그러나 이 경우 생성자는 로그인 없이 인스턴스화되며 미들웨어가 어디에 위치하든 생성자가 먼저 실행된 다음 미들웨어가 실행됩니다.
내가 원하는 결과는 다음과 같습니다.
1 미들웨어, 로그인 결정, 점프 없음. 로그인 후
2로그인 후 인스턴스화된 생성자
3이것이 프로모션입니다, 프로모션을 실행하세요!
로직을 어떻게 수정하나요? 공개 메소드를 호출하기 전에 로그인해야 합니다. 로그인되어 있지 않으면 로그인으로 이동합니다(등록 및 로그인 제외).

아마도 문제는 Laravel이 생성자를 먼저 실행한 다음 미들웨어를 호출할 수 있다는 것입니다.
그럼 요구 사항을 충족하려면 어떤 종류의 논리를 사용해야 합니까?

으아악

이 두 가지 일반적인 사항은 일반적으로 __construct로 작성됩니다!

아직도 헷갈립니다. 상식적으로 보면 라우터에 정의되어 있으면 판단 클래스에 이런 메소드가 있고 이때 미들웨어가 호출된 다음 생성자가 실행되고 그 다음 메소드가 나옵니다! 어떻게 그런 과정이 일어날 수 있겠는가!


대략적인 방법 문제는 다음을 참조하세요. (생성자에서 점프할 수 없으며 laravel에서 echo 및 종료를 작성하는 것은 매우 보기 흉합니다. 어쨌든 참을 수 없습니다. 위 데모는 순전히 보기 위한 것입니다!)

http://laravelacademy.org/pos...
곰곰히 생각해 본 결과, 이것이 객체 지향 책임 분리 요구 사항을 완벽하게 파괴하고 결합 정도를 성공적으로 향상시키는 것으로 나타났습니다.
이 문장 때문에 나는 생각했습니다. 미들웨어를 사용하세요! (어느게 더 좋을까요? 아직 초보라서 어떻게 말해야할지 모르겠네요!)


Laravel 5.3은 미들웨어 구성 -> 컨트롤러 구성 -> 미들웨어 핸들 실행 -> 컨트롤러 미들웨어 실행 -> 컨트롤러이므로 미들웨어는 생성자 다음에 실행됩니다.

伊谢尔伦
伊谢尔伦

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

모든 응답(2)
迷茫

중국에서는 최신 버전 5.3을 사용하고 있습니다

5.3은 실제로 미들웨어의 구현 로직을 변경했습니다

경로 일치 - 경로 미들웨어 읽기 - 컨트롤러 인스턴스화 - 컨트롤러 읽기 중간 키 - 미들웨어 실행 - 작업 실행路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action

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

重写 CallAction 在 CallAction中逻辑判断

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

개인적으로 Controller 생성자에서 메서드를 초기화하는 것은 권장되지 않습니다. 미들웨어 호출을 사용하는 것 외에는 어떠한 논리적 판단도 하지 마세요.

CallAction에서 논리적 판단을 내리기 위해 CallAction을 다시 작성

모든 경로 일치는 CallAction을 사용하여 컨트롤러의 메서드를 호출하기 때문입니다🎜 🎜🎜5.3 이하 버전에서는 미들웨어가 먼저 실행된 후 컨트롤러가 초기화됩니다. 이것이 5.3과의 가장 큰 차이점입니다. 🎜🎜
淡淡烟草味

생성자가 먼저 실행되어야 하므로 문제가 없는 것 같습니다. . .

laravel5.3의 문서를 살펴보니 이제 미들웨어가 생성된 후 실행됩니다. 다른 하위 버전으로 전환하거나 미들웨어를 사용하지 않거나 원래 생성자가 호출할 모든 메서드를 미들웨어에 작성합니다. .

예: (참고: 이 기능을 사용하려면 laravel 버전 5.3.4 이상이 필요합니다.)

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿