중국에서는 최신 버전을 사용하는 사람이 아무도 없습니다. 이런 논리적인 변화를 눈치채지 못하셨나요? 생성자에서 사용자의 로그인도 확인하지 않는다(알지 못했다면 곤란하다)?
공식 답변을 읽을 수 있도록 도와주세요: 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은 미들웨어 구성 -> 컨트롤러 구성 -> 미들웨어 핸들 실행 -> 컨트롤러 미들웨어 실행 -> 컨트롤러이므로 미들웨어는 생성자 다음에 실행됩니다.
중국에서는 최신 버전 5.3을 사용하고 있습니다
5.3은 실제로 미들웨어의 구현 로직을 변경했습니다
경로 일치 - 경로 미들웨어 읽기 - 컨트롤러 인스턴스화 - 컨트롤러 읽기 중간 키 - 미들웨어 실행 - 작업 실행
路由匹配 - 读取路由中间件 - 实例化Controller - 读取Controller中间键 - 执行中间件 - 执行action
个人不鼓励在Controller的构造函数中初始化方法,除了使用中间件调用之外,不要做任何逻辑判断的事情。
重写 CallAction 在 CallAction中逻辑判断
因为任何一个路由的匹配都会使用
개인적으로 Controller 생성자에서 메서드를 초기화하는 것은 권장되지 않습니다. 미들웨어 호출을 사용하는 것 외에는 어떠한 논리적 판단도 하지 마세요. 모든 경로 일치는CallAction
CallAction
을 사용하여 컨트롤러의 메서드를 호출하기 때문입니다🎜 🎜🎜5.3 이하 버전에서는 미들웨어가 먼저 실행된 후 컨트롤러가 초기화됩니다. 이것이 5.3과의 가장 큰 차이점입니다. 🎜🎜생성자가 먼저 실행되어야 하므로 문제가 없는 것 같습니다. . .
laravel5.3의 문서를 살펴보니 이제 미들웨어가 생성된 후 실행됩니다. 다른 하위 버전으로 전환하거나 미들웨어를 사용하지 않거나 원래 생성자가 호출할 모든 메서드를 미들웨어에 작성합니다. .
예: (참고: 이 기능을 사용하려면 laravel 버전 5.3.4 이상이 필요합니다.)
으아악