2012-11-26 14 views
5

मेरे पास एक सिलेक्स प्रोजेक्ट है जहां मैं FormServiceProvider और ValidatorServiceProvider का उपयोग करता हूं। मैं form.factory निर्माता के साथ एक रूप बना दिया है, जोड़ा फ़ील्ड और डाटासेट के रूप में किसी चीज़ का इस्तेमाल:सिम्फनी ऑब्जेक्ट बाधाओं को मान्य नहीं करता

if ($app['request']->getMethod() == 'POST') { 
    $form->bind($app['request']); 
    if ($form->isValid()) { 
     (...) 
    } 
} 
:

$form = $app['form.factory']->createBuilder('form', $object) 

मैं तो "सामान्य तरीके से" submition पर प्रपत्र को मान्य करने की कोशिश

static public function loadValidatorMetadata(ClassMetadata $metadata) { 
    $metadata->addPropertyConstraint('name', new Assert\MinLength(5, array('message' => 'Name too short'))); 
} 

जब मैं एक छोटा नाम क्षेत्र के साथ फ़ॉर्म सबमिट करेंगे, अगर है अभी भी सच वापसी:

वस्तु में, मैं एक loadValidatorMetadata स्थिर विधि जोड़ लिया है। अगर मैं इस तरह वस्तु पर एक सत्यापित करें विधि चलाएँ:

$errors = $app['validator']->validate($object) 

यह बाधा के आधार पर एक त्रुटि देता है, लेकिन फार्म अगर है तो यह त्रुटि नहीं मिल रहा है। जब मैंने सिम्फनी फॉर्म क्लास में देखा, तो मैंने पाया कि अक्षम कॉन्फ़िगरेशन सत्य होने पर वैध फ़ील्ड बाल फ़ील्ड की जांच कर रहा है। यह मेरे रूप में मामला है, लेकिन मुझे नहीं पता कि क्यों। मैंने सिलेक्स सेवा प्रदाताओं को बिना किसी विशेष कॉन्फ़िगरेशन के सामान्य तरीके से पंजीकृत किया है। किसी भी विचार को ऑब्जेक्ट बाधाओं के आधार पर फ़ॉर्म को विफल करने में कैसे विफलता है?

उत्तर

0

निम्नलिखित मेरी Silex सेटअप में ठीक काम कर रहा है। शायद आपको $form->handleRequest() विधि पर कॉल करने की आवश्यकता है?

नियंत्रक

$app->match('/form', function (Request $request) use ($app) { 

    $object = new \My\Namespaced\Entity\Object(); 

    $form = $app['form.factory']->createBuilder('form', $object) 
     ->add('name') 
     ->add('submit', 'submit') 
     ->getForm(); 

    $form->handleRequest($request); 
    if ($form->isValid()) { 
     $app['session']->getFlashBag()->add('success', 'Success flash message'); 
    } 
    else { 
     $app['session']->getFlashBag()->add('danger', 'Error flash message'); 
    } 

    return new Response($app['twig']->render('form.html.twig', array(
     'form' => $form->createView(), 
    ))); 

})->bind('form'); 

वस्तु कक्षा

<?php 

namespace My\Namespaced\Entity; 

use Symfony\Component\Validator\Mapping\ClassMetadata; 
use Symfony\Component\Validator\Constraints as Assert; 

class Object 
{ 
    private $name; 

    static public function loadValidatorMetadata(ClassMetadata $metadata) { 
     $metadata->addPropertyConstraint('name', new Assert\Length(array(
      'min' => 5, 
      'minMessage' => 'Name too short', 
     ))) 
     ->addPropertyConstraint('name', new Assert\NotBlank(array(
      'message' => 'Name is required field.' 
     ))); 
    } 

    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 
} 

टहनी खाका

{% extends 'layout.html.twig' %} 
{% block content %} 
    {{ form(form, {action: path('form'), attr:{ 'novalidate': 'novalidate' }}) }} 
{% endblock %} 
संबंधित मुद्दे