【问题标题】:Symfony 3 Routing for custom reusable Bundle ignoredSymfony 3 路由自定义可重用捆绑被忽略
【发布时间】:2017-11-07 15:46:50
【问题描述】:

我正在为我的项目创建一个可重用的捆绑包,它在很大程度上依赖于覆盖。奇怪的是,在某些时候我的路由被忽略了,我无法让它工作。

Note: AppBundle extends MyBundle

routing.yml

my:
    resource: '@MyBundle/Controller/'
    type: annotation
app:
    resource: '@AppBundle/Controller/'
    type: annotation

src/MyBundle/Controller/IndexController.php

<?php

namespace MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class IndexController extends Controller
{
    /**
     * Index
     *
     * @Route("/", name="index")
     * @Method("GET")
     */
    public function indexAction()
    {
        return $this->render('index.html.twig');
    }

}

composer.json

...
"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle",
        "MyBundle\\": "src/MyBundle"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php"
    ]
},
...

但我仍然收到 NotFoundHttpException - 找不到“GET /”的路由

我是否缺少某些捆绑包的特殊配置?

更新:显然它与捆绑包有关。当我删除 getParent() 函数时,一切都会再次按预期工作 - 但是我需要它来覆盖捆绑包。

namespace AppBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
    public function getParent()
    {
        return 'MyBundle';
    }

}

【问题讨论】:

  • 你使用的是什么 Symfony 版本?
  • 确切地说是 3.3.10
  • 你试过清除缓存吗?
  • 当然多次;-)
  • 查看更新:使用 symfony 继承会导致这个问题 - 但是这是一个必需的功能。那么,这里的冲突在哪里?

标签: php symfony bundle


【解决方案1】:

尝试“../../src/MyBundle/Controller”和“../../src/AppBundle/Controller”

它是known issue,但是是“bundle inheritance is now deprecated and will be removed in Symfony 4”。

【讨论】:

  • 谢谢,这行得通,但我很高兴收到有关此的更多信息。有点出乎意料。
  • 谢谢。好吧,这是一种耻辱。但是您可能会提供另一种解决方案:我有一个 MyBundle/Model/ImportNewsletterModel.php 和一个类似 getRecipiants() 的函数,它返回一个电子邮件数组。此功能因应用程序而异。我最初考虑在需要时覆盖文件,但这似乎是一种不好的做法 - 那么我应该如何实现呢?
  • 我认为,ImportNewsletterModel 可以是一个抽象类(BaseImportNewsletterModel),在不同的应用程序中你可以扩展它并实现 getRecipiants() 方法和其他应用程序不同的方法
  • 谢谢,但是说 AppBundle/ImpNlModel.php 扩展了 MyBundle/ImpNlModel.php,我如何将结果返回到 MyBundle 控制器(MyBundle/Controller/Newsletter.php - 这用于处理 getReceipients 的结果())?
  • MyBundle/Controller/Newsletter.php 中的$emails = $em-&gt;getRepository('AppBundle:ImpNlModel')-&gt;getReceipients(); 有什么问题?
猜你喜欢
  • 2017-11-09
  • 2011-03-22
  • 1970-01-01
  • 2014-04-11
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多