twn39 / code

:memo: 代码笔记,通过 issue 的方式记录日常遇到的问题和学习笔记
13 stars 1 forks source link

Zend Expressive 加载配置路由 #219

Open twn39 opened 5 years ago

twn39 commented 5 years ago

zend expressive 已经实现了全面的模块化结构,按照官方教程,他的路由是写在config/routes.php文件里,这样的话路由并不是模块化的,通过delegators可以将路由写在每个模块的ConfigProvider.php里面。

首先需要在ConfigProvider.php的dependencies加载delegators,额外添加:

            'invokables' => [
                Handler\LogoutHandler::class => Handler\LogoutHandler::class,
            ],
            'factories'  => [
                Handler\HomePageHandler::class => Handler\HomePageHandlerFactory::class,
                ContactHandler::class => function (ContainerInterface $container) {
                    $template = $container->get(TemplateRendererInterface::class);
                    return new ContactHandler($template);
                },
            ],
            'delegators' => [
                \Zend\Expressive\Application::class => [
                    \Zend\Expressive\Container\ApplicationConfigInjectionDelegator::class,
                ],
            ],

然后在配置项添加routes:

            'dependencies' => $this->getDependencies(),
            'templates'    => $this->getTemplates(),
            'routes' => [
                [
                    'path' => '/contact',
                    'middleware' => ContactHandler::class,
                    'allowed_methods' => ['GET'],
                    'name' => 'contact',
                    'options' => [],
                ]
            ],
twn39 commented 5 years ago

factory可以直接在ConfigProvider.php里写function,这样可以少建立一些factory文件