CakePHP3의 Middleware 도입

2764 단어 PHPCakePHPcakephp3
사용하고 있습니까? Middleware

이것이군요. CakePHP3.3에서 도입된 기능이군요.
htp // 보오 k. 곱셈 php. 오 rg / 3.0 / 그럼 / 안 t 롯 rs / 미 d d. HTML

Middleware는 무엇입니까?



액세스에 대한 요청, 응답에 처리를 끼울 수 있습니다.
처리를 사이에 둔다고 하면, Controller에는 initialize 라든지 있습니다만 보다 전에 처리를 사이에 끼울 수가 있습니다. 됩니다.

또한 PSR-7 와 호환되므로 Packagist 등에서 공개된 PSR-7 호환 라이브러리를 이용할 수 있습니다.

예를 들어, Laravel에서 사용되는 Middleware를 CakePHP에서 사용하는 것도 가능합니다. (Laravel에 의존하지 않는 경우)

어느 시점에서 움직이는 거야?



초기라면 이하의 순서로 동작합니다.
  • ErrorHandlerMiddleware(요청 처리)
  • AssetMiddleware (요청 처리)
  • RoutingMiddleware (요청 처리)
  • CakePHP
  • RoutingMiddleware (응답 처리)
  • AssetMiddleware (응답 처리)
  • ErrorHandlerMiddleware(응답 처리)

  • 이 그림과 같이 Middleware를 여러 겹쳐 가는 이미지로 동작합니다.



    어떤 곳에서 사용할 수 있습니까?



    인증이나 리퀘스트 오브젝트나 응답 오브젝트의 가공, IP 주소 제한 등 어플리케이션이 기동하기 전의 처리등은 적절한 처리라고 말할 수 있다고 생각합니다.
    응답측이라면, 로그 출력이나 실행 시간의 계측 등이 좋은 것일까요.

    위의 그림에서도 그렇습니다만, initialize는 어플리케이션이 기동한 후에가 됩니다.
    인증 등은 기동 전의 처리로 좋은 것은 여러 가지 있다고 생각됩니다.

    Middleware 샘플



    1 메소드 중에서, 요청 처리, 응답 처리를 실시합니다.
    버릇이 있습니다.
    <?php
    
    // src/Middleware/TrackingCookieMiddleware.php の中で
    namespace App\Middleware;
    
    class TrackingCookieMiddleware
    {
        public function __invoke($request, $response, $next)
        {
            // ここでリクエスト処理
    
            $response = $next($request, $response);
    
            // ここでレスポンス処理
    
            return $response;
        }
    }
    

    Middleware 사용법



    Middleware 시작과 같은 설정은 src/Application.php에 설명되어 있습니다.
    필요한 Middleware를 추가합니다.

    주의점으로서는, 작성한 Middleware의 __invoke 에 request, response 오브젝트가 건네 옵니다만,
    각각 Zend\Diactoros\ServerRequest , Zend\Diactoros\Response 로 되어 있으며 Cake\Network\Request , Cake\Network\Response 와는 다른 점에 주의가 필요합니다.
    webroot/index.php$server->run() 의 인수에 이용하고 싶은 오브젝트를 건네주면(자), Cake\Network\Request , Cake\Network\Response 등 사용하고 싶은 오브젝트로 전환하는 것이 가능합니다.

    메인터넌스 화면 표시용 플러그인 만들어 보았다



    Middleware를 공부하면 Maintenance 플러그인을 만들어 보았습니다.
    쉽게 유지 보수 화면으로 전환하는 플러그인이됩니다.

    htps : // 기주 b. 코 m/후시 c/마인테나세/
    ,

    좋은 웹페이지 즐겨찾기