Symfony2重写控制器

时间:2012-04-09 10:35:00

标签: symfony controller override fosuserbundle

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

这是我选择的方式:

我从FOSUserBundle继承了我的包:

namespace Jheberg\MembersBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

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

我在我的bundle的控制器目录中覆盖了名为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;
    }
}

你有解决方案吗?

2 个答案:

答案 0 :(得分: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根本就没用过(好像它根本不存在)。现在我正在使用所有被覆盖的视图,控制器等。希望这会有所帮助。

答案 1 :(得分:1)

它对我不起作用。我试着做你的解决方案。最后我只是清除缓存runnig php bin / console cache:当然清楚我的proyect内部。和func一样魅力。

所以..尝试清除缓存。

抱歉我的英语不好。