【发布时间】:2018-10-08 13:25:18
【问题描述】:
我尝试按照官方说明在我的表单中获得服务: https://symfony.com/doc/current/form/form_dependencies.html
这是我的 services.yaml:
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false
class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
class
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
App\Service\:
resource: '../src/Service/*'
App\Form\:
resource: '../src/Form/*'
我的表格是这样的:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\Common\Persistence\ObjectManager;
use App\Entity\Contrat;
use App\Entity\Society;
use App\Entity\Client;
use App\Form\DataTransformer\ClientToNumberTransformer;
use App\Form\DataTransformer\SocietyToNumberTransformer;
class ContratType extends AbstractType{
private $manager;
public function __construct(SocietyToNumberTransformer $manager){ // this is the breakpoint from error
$this->manager = $manager;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('...')
...
;
// Old fashion way for testing only ...
$builder->get('client')->addModelTransformer(new ClientToNumberTransformer($this->manager));
$builder->get('society')->addModelTransformer(new SocietyToNumberTransformer($this->manager));
}
public function configureOptions(OptionsResolver $resolver){
$resolver->setDefaults(array(
'data_class' => Contrat::class,
));
}
它看起来很漂亮......当我用邮递员测试这个时,我得到了这个错误:
函数 App\Form\ContratType::__construct() 的参数太少,0 在第 92 行传入 /code/vendor/symfony/form/FormRegistry.php 和 正好 1 个预期
我不明白,我在自动装配调试命令中找到了我的 fomr:
php bin/console debug:autowiring
App\Form\ContratType
App\Form\DataTransformer\ClientToNumberTransformer
App\Form\DataTransformer\SocietyToNumberTransformer
和控制器:
public function addContrat(Request $request, FormData $formData){
$em = $this->getDoctrine()->getManager('default');
$data = $formData->getRequestData($request);
var_dump($data);
$contrat = new Contrat;
$form = $this->factory->createBuilder(ContratType::class, $contrat)->getForm();
$form->submit($data);
if($form->isValid()){
$em->persist($contrat);
$em->flush();
return $this->response(
$this->serialize(
$contrat,
['group1']
)
);
}
return $this->response('error', 500);
}
感谢您的帮助。
【问题讨论】:
-
您向 Postman 请求的路线在哪里?
-
调用控制器实例化我的表单的根...看起来像 /api/contrat/add
-
控制器内的代码,我们可以看到它吗?
-
我已经添加了这个;)
-
$contrat = new Contrat;您正在创建一个没有参数的对象。