Я новичок в symfony и пытаюсь зарегистрировать сущность в своей базе с помощью формы. Вот форма:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
class OfferType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class, array('label' => '*Title: ' , 'attr' => array('class' => 'input2')))
->add('nameofgame', TextType::class, array('label' => 'Name of the Game:','attr' => array('class' => 'create button1')))
->add('description', TextType::class, array('label' => 'Description: ' , 'attr' => array('class' => 'input2')))
->add('price', MoneyType::class, array('label' => '*Price: ' , 'attr' => array('class' => 'input2')))
->add('numbertelephone', TelType::class, array('label' => 'Telephone Number:','attr' => array('class' => 'create button1')))
->add('save', SubmitType::class, array('label' => 'Post Offer','attr' => array('class' => 'create button1')))
;
}
}
Вот мой контроллер:
/**
* @Route("/BoardFind/Trade/RegisterOffer", name = "RegisterOffer")
* @param Request $request
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function register(Request $request)
{
$Offer = new TradeOffer();
$form = $this->createForm(OfferType::class, $Offer);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$Offer = $form->getData();
echo maleee;
$entityManager = $this->getDoctrine()->getManager();
$session = $this->get('session');
$userId = $session->get("id");
$user = $this->getDoctrine()
->getRepository(User::class)->find($userId);
$Offer->setUser($user);
$Offer->setTraderName($user->getName());
$Offer->setTraderLastName($user->getLastName());
$Offer->setUsername($user->getUsername());
$Offer->setTraderEmail($user->getEmail());
$entityManager->persist($Offer);
$entityManager->flush();
$flashbag = $this->get('session')->getFlashBag();
$flashbag->add("SuccessfullRegister", "You successfully registered your offer!");
return $this->redirectToRoute('Trade');
}
return $this->render('home/RegisterOffer.html.twig', array(
'form' => $form->createView(),
));
}
Когда я пытаюсь зарегистрировать предложение, оно говорит, что "Ожидаемый аргумент типа "App\Entity\double", указан "double"". но дело в том, что я считаю свойство сущности правильным. Вот свойство:
/**
* @Assert\Type("double")
* @Assert\NotBlank()
*/
private $price;
Если вы хотите изображение ошибки здесь, это так. Так в чем проблема?
Спасибо, float помог написать ответ, чтобы я мог пометить его как решенный






В PHP double является псевдонимом для float. При использовании подсказок скалярного типа или возвращаемых типов этот псевдоним не поддерживается, и вместо него необходимо использовать фактический тип. Это поведение сравнимо с поддерживаемым bool, но не с boolean.
Другими словами, в ваших геттерах и сеттерах вы должны вместо этого ссылаться на float.
Кажется, что система типов PHP не позволяет использовать
doubleв качестве подсказки типа или возвращаемого типа. Возможно, потому что это просто псевдоним дляfloat. В вашем сеттере и геттере попробуйте заменитьdoubleнаfloat. Вы также можете вместо этого использоватьstring, если вы используете строгую типизацию и более безопасные вычисления с плавающей запятой с использованием расширенияbcmath.