저는 현재 젠드 익스프레션을 배우고 있으며 루트/액션 내에서 미들웨어에 액세스하는 방법에 대한 몇 가지 옵션을 볼 수 있습니다.젠드 익스프레션 - 미들웨어 주입을위한 가장 좋은 방법
표현형 스켈레톤 애플리케이션에는 컨테이너가 삽입 된 HomePageFactory가 있으며, 라우터, 템플릿 엔진 등이 컨테이너에서 가져오고 새로운 HomePageAction 클래스가이를 사용하여 생성되어 반환됩니다. 예를 들어
는 :
class HomePageFactory
{
public function __invoke(ContainerInterface $container)
{
$router = $container->get(RouterInterface::class);
$template = ($container->has(TemplateRendererInterface::class))
? $container->get(TemplateRendererInterface::class)
: null;
return new HomePageAction($router, $template);
}
나는 다음 플래시 메신저를 필요로하고 다음 건너 온 :
class SlimFlashMiddlewareFactory
{
public function __invoke($container)
{
return function ($request, $response, $next) {
// Start the session whenever we use this!
session_start();
return $next(
$request->withAttribute('flash', new Messages()),
$response
);
};
}
}
그래서이 약간 다릅니다 및 속성을 통해 요청에 미들웨어를 추가하고있다. 그 같은 필요한 경우 다음 검색 할 수있는 :
$flashMessenger = $request->getAttribute('flash');
그래서 정말 내 질문이 무엇인지 행동으로 FlashMessenger를 얻기의 이러한 두 가지 방법의 장점/단점은?
데이터베이스에서 사용자를 가져 오는 작업을 처리하는 UserService가있어 여러 작업/경로에 필요할 수있는 경우 HomeService & 팩토리 (및 필요한 다른 모든 사용자)를 수정하여 UserService ?
즉class HomePageFactory
{
public function __invoke(ContainerInterface $container)
{
$router = $container->get(RouterInterface::class);
$template = ($container->has(TemplateRendererInterface::class))
? $container->get(TemplateRendererInterface::class)
: null;
$userService = $container->get(App\UserService::class);
return new HomePageAction($router, $template, $userService);
}
또는 나는 FlashMessenger가 (관리 좀 더 쉽게 보인다)의 작동 방식에 가서 그것을 필요 그런 식으로 액세스하는 속성을 통해 요청에 추가하는 것이 더 있을까?
즉
$userService = $request->getAttribute('UserService');
후자의 옵션을 사용하여 성능 문제가 있는지 나는이 특정 경로가 아닌 UserServer되는 응용 프로그램 전체를이 방식으로 수행 될 수 있음을 이해한다하지만 내가 궁금하네요 .
내 질문에이 글을 쓰고 나면 진정한 미들웨어가 아니므로 실제로는 HomePageAction & 팩토리를 수정하고 UserService를 추가하는 것이 더 쉽고 사용하기 쉽도록하는 것입니다. 속성 ala FlashMessenger. 그러나 구루가이를 명확히하는 데 도움이된다면 매우 편리 할 것입니다.
미리 감사드립니다.
답변 해 주셔서 감사합니다. 이 특정 UserService는 인증을 처리하지 않으므로 요청을 수정할 필요가 없습니다. 그래서 저는 그것을 행동으로 주입함으로써 올바른 방향으로 가고 있다고 생각합니다. 정신 건강 체크 및 설명에 감사드립니다. – Neddage