在自己的Symfony3供应商包

时间:2017-02-11 17:24:02

标签: symfony

我想构建一个包含多个可重用捆绑包的私有生态系统,类似于Sonata项目。这是我的第一次,所以我跟着Symfony2 - creating own vendor bundle - project and git strategy并使用DefaultController设置了一个名为PUIEconomyBundle的简单包。我使用composer.json从我的Git仓库导入了一个示例项目。

现在我遇到了404 No route found for "GET /test"。注释路线以保持概览非常重要。 如何将工作注释路由引入我的控制器? debug:router未提及此捆绑的路由,尽管分析器说PUIEconomyBundle已启用。

DefaultController:

class DefaultController extends Controller
{
    /**
     * @Route("/test", name="homepage")
     * @param Request $request
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function indexAction(Request $request)
    {
        dump('Hello!');die;
    }
}

扩展:

public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    //$config = $this->processConfiguration($configuration, $configs);

    $fileLocator = new FileLocator(__DIR__.'/../Resources/config');
    $loader = new Loader\YamlFileLoader($container, $fileLocator);
    $loader->load('services.yml');
}

Services.yml:

services:
    pui_economy.routing_loader:
        class: Company\PUI\EconomyBundle\Service\RoutingLoader
        tags:
            - { name: routing.loader }

RoutingLoader:

class RoutingLoader extends Loader
{
    public function load($resource, $type = null)
    {
        $collection = new RouteCollection();

        $resource = '@PUIEconomyBundle/Resources/config/routing.yml';
        $type = 'yaml';

        $importedRoutes = $this->import($resource, $type);

        $collection->addCollection($importedRoutes);

        return $collection;
    }

    public function supports($resource, $type = null)
    {
        return 'advanced_extra' === $type; // ??
    }
}

的routing.yml:

pui_economy:
    resource: "@PUIEconomyBundle/Controller"
        type: annotation

谢谢

3 个答案:

答案 0 :(得分:1)

您似乎忘记添加此内容:

app_extra:
    resource: .
    type: extra
app/config/routing.yml中的

请参阅Using the custom Loader

答案 1 :(得分:0)

为什么你使用自定义路由加载器?这是一个非常高级的主题,通过注释简单地绑定路径上的控制器是不必要的。

您可以在此处找到@Route注释的工作示例:https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html

您还应该删除die()语句。如果您以这种方式终止请求,Symfony mabey将不会给您回复。

答案 2 :(得分:-1)

您不需要自定义路由加载器来加载您的带束注释的路由。

我面临类似的问题。我们所需要做的就是将此配置放入我们要加载捆绑软件的应用程序中

  

config / routes.yaml

NA

仅此而已:)

my_cool_bundle_routes: # loads routes from the given routing file stored in some bundle resource: '@XyzAuthBundle/Controller/' type: annotation 的命名并不重要。它必须是唯一的。