3

我使用 FOSUserBundle,我想覆盖他的 registerAction 控制器。我阅读了与覆盖 FOSUserBundle 控制器相关的文档,但它不起作用。通过在控制器中回显一条小消息,它不会在模板中打印。

这是我选择的方式:

我从 FOSUserBundle 继承了我的包:

namespace Jheberg\MembersBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class JhebergMembersBundle extends Bundle
{
    public function getParent()
    {
        return 'FOSUserBundle';
    }
}

我覆盖RegistrationController.php了我的包的控制器目录中命名的文件中的 registerAction :

namespace Jheberg\MembersBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;

class RegistrationController extends BaseController
{
    public function registerAction()
    {
        echo 'foo';
        $response = parent::registerAction();

        // do custom stuff

        return $response;
    }
}

你有什么解决办法吗?

4

2 回答 2

3

只是花了几个小时试图让这个工作,终于弄明白了。我缺少的部分是使用 MyUserBundle 中的 User 实体扩展我的 User 类。例如:

namespace MyNamespace\MyMainBundle\Entity;

use MyNamespace\MyUserBundle\Entity\User as BaseUser;

class User extends BaseUser
{
}

User 实体与 FOSUserBundle 中的实体相同(只是具有不同的命名空间)。

namespace MyNamespace\MyUserBundle\Entity;

use FOS\UserBundle\Model\User as AbstractUser;

abstract class User extends AbstractUser
{
}

如果我不这样做,正如 Jeffrey 所提到的,MyUserBundle 根本就没有被使用(好像它不存在一样)。现在我所有的覆盖视图、控制器等都被使用了。希望这可以帮助。

于 2012-05-23T12:02:40.253 回答
1

它对我不起作用。我试着做你的解决方案。最后,我只是清除运行 php bin/console 缓存的缓存:当然是在我的项目内部清除。并且像魅力一样发挥作用。

所以..尝试清除缓存。

对不起我的英语不好。

于 2016-10-12T16:01:19.720 回答