服务参数注入:"传递给实体构造函数的参数1必须是实体的实例,没有给出"

时间:2017-05-15 17:26:32

标签: php forms service symfony-3.2

我正在使用Symfony 3应用程序上的表单。

我创建了 ClassType 来创建特定实体的形式:

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $currencies = $this->doctrine->getRepository('AppBundle:Currency')->findAll();
    $currenciesFormat = array();

    foreach($currencies as $currency){
        $currenciesFormat += array($currency->getName() .' ('. $currency->getShortName() . ')' => $currency);
    }

    $cycles = $this->doctrine->getRepository('AppBundle:Cycle')->findAll();
    $cyclesFormat = array();

    foreach($cycles as $cycle){
        $cyclesFormat += array($cycle->getName() => $cycle);
    }

    $builder
        ->add('currency', ChoiceType::class, array(
            'label' => 'Waluta',
            'choices' => $currenciesFormat,
        ))
        ->add('cycle', ChoiceType::class, array(
            'label' => 'Cykl',
            'choices' => $cyclesFormat,
        ))
    ;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => CyclicNewsletter::class,
    ));
}

我还有一个通用的 POST 操作来处理大部分提交(regullar 添加到db 类型的东西)。它使用变量类名一次匹配多个表单。 就目前而言,所有这一切都var_dumps它应该保留在数据库中的类:

  /**
     * @Route("/form/{url}", name="entity_form_post")
     * @Method("POST")
     *
     */
    public function formPostAction(EntityForm $entityForm, Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $form = $this->createForm($entityForm->createType())
            ->add('Dodaj!', SubmitType::class)
        ;

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            $formData = $form->getData();



            $em->persist($formData);

            var_dump($formData);
            exit;
    }
}

现在我希望CyclicNewsletter构造函数默认将当前登录的用户设置为$user字段。

为此我创建了一个为班级工作的服务:

cyclic_newsletter:
    class: AppBundle\Entity\CyclicNewsletter
    arguments: ["@security.token_storage"]

并使实体的构造函数使用该参数:

public function __construct(TokenStorage $tokenStorage)
{
    $this->user = $tokenStorage->getToken()->getUser();
    $this->date = new DateTime();
}

但是,提交表单时我得到的输出是:

  

类型错误:参数1传递给   AppBundle \ Entity \ CyclicNewsletter :: __ construct()必须是一个实例   AppBundle \ Entity \ TokenStorage,没有给出,调用   C:\ PHP \回购\半人马\供应商\ symfony的\ symfony中的\ src \的Symfony \分量\表格\延期\核心\型号\ FormType.php   在第136行

我尝试在类中使用单独的方法,但它也需要参数。

有什么方法可以让我的工作吗?

PS。所有缓存都已清除

编辑:   - 正在运行debug:container正确显示服务。   - 在 appDevDebugProjectContainer.php 中搜索我的服务会返回:

/**
 * Gets the 'cyclic_newsletter' service.
 *
 * This service is shared.
 * This method always returns the same instance of the service.
 *
 * @return \AppBundle\Entity\CyclicNewsletter A AppBundle\Entity\CyclicNewsletter instance
 */
protected function getCyclicNewsletterService()
{
    return $this->services['cyclic_newsletter'] = new \AppBundle\Entity\CyclicNewsletter($this->get('security.token_storage'));
}

0 个答案:

没有答案