我正在使用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'));
}