2012-04-09 114 views
3

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

这是我自己选择的方式:我继承了我的包从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; 
    } 
} 

你有什么解决方案吗?

+0

你不会看到它,你需要添加退出或死亡,即echo'foo'; exit; – Inoryy 2012-04-09 11:31:43

+0

它不起作用,因为Symfony调用FOSUserBundle的registerAction方法,而不是我的。所以,没有echo()和exit()。 – 2012-04-09 11:35:42

+0

删除你自己的bundle'routing.yml'(默认为空)。我使用的是默认值,如果Symfony具有相同的文件名,那么它真的会从'child'包中读取* everything *来代替父对象。 – Tatsh 2016-01-13 09:30:24

回答

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 
{ 
} 

如果我不这样做,因为杰弗里提到,MyUserBundle完全不被使用(就好像它不存在)。现在我正在使用所有被覆盖的视图,控制器等。希望这可以帮助。

0

它不适合我。我尝试做你的解决方案。最后,我只需清除php bin/console缓存中的缓存runnig:当然,清除我的内部项目。 func就像一个魅力。

所以..试着清除缓存。

对不起,我的英语不好。