Я создаю простой список тележках с пользователями и продуктами, назначенными ему. Моя форма для новой корзины выглядит следующим образом:Symfony2 множественный выбор не подтвержден
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('cartName', 'text', array('label' =>'Nazwa koszyka:'))
->add('user', new UserForm(), array('data_class' => 'Zadanie\Bundle\Entity\User', 'label' => false))
->add('products','entity', array('label' => 'Wybierz produkty:', 'class' =>'Zadanie\Bundle\Entity\Product' , 'multiple' => true, 'required' => true))
->add('Zapisz', 'submit');
}
и все отлично кроме того, что я могу отправить форму даже без выбора какого-либо продукта.
До сих пор я просто добавил «обязательный» jquery, но мне это не нравится. Может ли кто-нибудь объяснить мне, почему он работает неправильно? : P
EDIT: Вот код из контроллера:
/**
* @Route("/cart/edit/{id}",name="_edit_cart")
* @Template()
*/
public function editAction($id, Request $request)
{
$cart = $this->getDoctrine()->getRepository('ZadanieBundle:Cart')->find($id);
if($cart == null)
{
throw $this->createNotFoundException('Nie znaleziono rekordu');
}
$form = $this->createForm(new CartForm(), $cart);
$form->handleRequest($request);
if($form->isValid())
{
$em = $this->getDoctrine()->getManager();
$data = $form->getData();
$em->persist($data);
$em->flush();
$this->get('session')->getFlashBag()->set('message', 'Koszyk zaktualizowano.');
return $this->redirect($this->generateUrl('_main_carts'));
}
return array('form' => $form->createView());
}
ВТОРОЙ EDIT:
я нашел РЕШЕНИЕ, (не знаю, если лучше, но работает :)), поэтому, если кто-нибудь сталкивается с этим:
Вы должны создать свой файл подтверждения (validation.yml) в разделе YourBundle/Resources/config, в котором вы должны поместить информацию о свойствах. В моем случае это было:
Zadanie\Bundle\Entity\Cart:
properties:
cartname:
- NotBlank: ~
user:
- NotBlank: ~
constraints:
- Callback:
methods:
- [Zadanie\Bundle\Form\MyValidator, isUserValid]
, а затем я создал MyValidator:
namespace Zadanie\Bundle\Form;
use Symfony\Component\Validator\ExecutionContextInterface;
use Zadanie\Bundle\Entity\Cart;
class MyValidator {
public static function isUserValid(Cart $cart, ExecutionContextInterface $context)
{
if(!$cart->getUser()->getName())
$context->addViolationAt('name', 'Proszę podać imię.', array(), null);
if(!$cart->getUser()->getSurname())
$context->addViolationAt('surname', 'Proszę podać nazwisko.', array(), null);
if(count($cart->getProducts()) == 0)
$context->addViolationAt('products', 'Proszę wybrać produkt.', array(), null);
}
}
Укажите код (вероятно, с вашего контроллера), который показывает, где вы реализуете эту форму/обрабатываете отправку формы. Это поможет нам помочь вам. –
Кроме того, покажите нам свое лицо вашей корзины покупок ... –