首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体Symony2访问表单prePersist?

实体Symony2访问表单prePersist?
EN

Stack Overflow用户
提问于 2015-01-06 18:27:32
回答 1查看 255关注 0票数 1

全部都是头衔。我希望能够从实体中的prePersist函数中访问表单。就像这样:

代码语言:javascript
复制
/** @ORM\PrePersist */
public function prePersist()
{
    //Symfony 1.4 way
    $params     = sfContext::getInstance()->getRequest()->getParameterHolder()->getAll();
    $this->gps84Long=$params['coordinate']['gps_84_lat_degrees'];

}

我之所以需要这样做,是因为表单值没有映射到数据库字段。我需要将2-3个表单字段合并成一个值,然后将其放在实体中的单个字段中。

为提供的答案编辑添加的.yml:

代码语言:javascript
复制
services:

   my.doctrine.subscriber:  
     class:  myCompany\myBundle\Models\MyDoctrineSubscriber
     arguments:  [@form.factory,"@request_stack"]
     tags:
       - { name: 'doctrine.event_subscriber', connection: 'default' }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-06 18:42:31

我的建议是创建一个原则用户并注入您想要的任何服务(XML示例):

service.xml

代码语言:javascript
复制
<service id="my.doctrine.subscriber" class="%my.doctrine.subscriber.class%">
    <argument type="service" id="form.factory" />
    <argument type="service" id="request_stack" />
    <tag name="doctrine.event_subscriber" connection="default" />
</service>

MyDoctirneSubscriber

代码语言:javascript
复制
class MyDoctirneSubscriber implements EventSubscriber
{
    private $formFactory;

    private $requestStack;

    /**
     * @param ContainerInterface $container
     */
    public function __construct(FormFactoryInterface $formFactory, RequestStack $requestStack)
    {
        $this->formFactory = $formFactory;
        $this->requestStack = $requestStack;
    }

    /**
     * @return array
     */
    public function getSubscribedEvents()
    {
        return [
            'prePersist',
            ...
        ];
    }

    /**
     * @param LifecycleEventArgs $eventArgs
     */
    public function prePersist(LifecycleEventArgs $eventArgs)
    {
        $entityManager = $eventArgs->getEntityManager();
        $entity = $eventArgs->getEntity();

        if ($entity instanceof MyEntity) {
            $request = $this->requestStack->getCurrentRequest();

            $form = $this->formFactory->create(TYPE, DATA_OR_NULL, OPTIONS);

            $form->handleRequest($request);

            ....
        }
    }

    ....
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27804811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档