2012-05-15 13 views
35

मुझे पता है कि आप एक फॉर्म में एक फॉर्म को विभाजित कर सकते हैं और किसी विशेष फ़ील्ड के लिए लेबल प्रस्तुत नहीं करना चुन सकते हैं, लेकिन मैं मदद नहीं कर सकता लेकिन सोचता हूं कि आपको फॉर्म क्लास से ऐसा करने में सक्षम होना चाहिए। विकल्प सरणी में 'लेबल' कुंजी आपको इस मान को जो कुछ भी आप पसंद करते हैं उसे बदलने देता है, लेकिन या तो झूठी या खाली स्ट्रिंग पास करने से फ़ील्ड नाम लौटाता है (नीचे दिए गए उदाहरण देखें जहां 'भूमिका' लेबल के रूप में प्रस्तुत की जाती है)।symfony2 में किसी फॉर्म क्लास में लेबल कैसे छिपाते हैं?

$builder 
      ->add('roles', 'entity', array(
       'class' => 'Acme\UserBundle\Entity\Role', 
       'label' => '' 
      )); 

$builder 
      ->add('roles', 'entity', array(
       'class' => 'Acme\UserBundle\Entity\Role', 
       'label' => false 
      )); 

अजीब, एक खाली जगह (जो बहुत गंदे महसूस करता है) से गुजर रहा है, एक पूरी तरह से खाली लेबल रेंडर करने के लिए लगता है कोई जगह नहीं, स्रोत देख भी जब साथ। क्या कोई भी सर्वोत्तम दृष्टिकोण पर कोई प्रकाश डाल सकता है, या यहां तक ​​कि रिक्त स्थान क्यों काम करता है?

+0

सुधार, सिम्फनी 2.0.x के लिए ऐसा करने का कोई तरीका नहीं था लेकिन cheesemacfly ने सही उत्तर संस्करण 2.2+ प्रदान किया है। – Mark

उत्तर

83

Symfony 2.2 जब से तुम label विशेषता के लिए false मूल्य का उपयोग कर <label> प्रतिपादन से बचने कर सकते हैं:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('Name', null, array('label' => false)) 
    ; 
} 

Source

+1

इसके लिए धन्यवाद। मैंने मूल रूप से 2.0.x प्रोजेक्ट के संबंध में प्रश्न पूछा था, लेकिन चूंकि मैंने एक संस्करण निर्दिष्ट नहीं किया है, मुझे लगता है कि यह सही जवाब है। साथ ही, चूंकि यह एक नया जोड़ा है, इसलिए फॉर्म वर्ग के पिछले संस्करणों में इसे करने का कोई तरीका स्पष्ट रूप से नहीं था, इसलिए उम्मीद है कि इसी तरह के मुद्दों वाले लोगों की मदद मिलेगी। – Mark

+3

@ मार्क मजेदार है, यह आज से 2.0.x में उपलब्ध है: http://symfony.com/blog/symfony-2-0-23- रिलीज़ (मैं कसम खाता हूं कि मेरे पास इसके साथ कुछ लेना देना नहीं है: डी) – cheesemacfly

+0

हा । उस स्थिति में यह निश्चित रूप से निश्चित रूप से सही जवाब है। यदि कोई व्यक्ति टिप्पणियों को नहीं पढ़ता है और अपने पूरे आवेदन को 2.2 तक बढ़ाता है तो यह आपके जवाब में लायक हो सकता है :) – Mark

2

मैं बहुत अच्छी तरह से अपने प्रश्न लेकिन रूप में समझ में नहीं आता लेबल का नाम दिखाने के लिए, personnaly मैं उस तरह कार्य करें:

मेरी टहनी में
$builder 
     ->add('role', 'text') 

:

<tr> 
     <td>{{ form_widget(form.role) }} </td> 
     <td>{{ form_label(form.role, "Name of Label") }}</td> 
    </tr> 
    <tr> 
     <td>{{ form_errors(form.role) }}</td> 
    </tr> 
2

इस काम करना चाहिए (हालांकि इसकी एक बहुत साफ नहीं समाधान)

$builder 
     ->add('roles', 'entity', array(
      'class' => 'Acme\UserBundle\Entity\Role', 
      'label' => ' ' 
     )); 

(टिक के बीच की जगह पर ध्यान दें)

+0

इसके लिए धन्यवाद, लेकिन आप देखेंगे कि मैं – Mark

3

मेरे लेबल को छिपाने के लिए, मुझे केवल फ़ील्ड के लिए विजेट प्रस्तुत करना था, न कि लेबल, उदाहरण के लिए

{{ form_widget(edit_form.event) }} 
{{ form_rest(edit_form) }} 

'' स्पेस के साथ लेबल 'के साथ समस्या यह है कि यह अभी भी HTML इनपुट प्रस्तुत करता है जो पृष्ठ पर है और पृष्ठ को प्रभावित करता है।

+0

प्रश्न में अपने कोड स्निपेट के नीचे इस समाधान का उल्लेख करता हूं। यह तरीका बेहतर है क्योंकि यह आपके मॉडल के अंदर 'व्यू' विनिर्देश नहीं डालता है। यदि आप त्रुटियां रखना चाहते हैं तो आप '{{form_errors (form.name)}} भी जोड़ना चाहेंगे। – Chris

11

रखें अपने 'दृश्य' विनिर्देशों अपने 'मॉडल'

से अलग

यदि आप स्वीकृत उत्तर का पालन करते हैं जो कहता है:

$builder 
     ->add('Name', null, array('label' => false)) 
    ; 

आपका फॉर्म पुनः उपयोग करने योग्य नहीं है। विशेष रूप से यदि आपका फॉर्म एक से अधिक स्थानों (या भविष्य में हो सकता है) में दिखाई देता है।

यदि आप फॉर्म लेबल प्रस्तुत नहीं करना चाहते हैं तो ट्विग (टिग का उपयोग करके मानते हुए) में ऐसा करना सबसे अच्छा है।

बजाय {{ form_row(form.name) }} प्रतिपादन के

, प्रत्येक तत्व separetly प्रस्तुत करना और बाहर निकालने के form_label

पूर्व।

{{ form_errors(form.name) }} 
{# {{ form_label(form.name) }} <-- just dont include this #} 
{{ form_widget(form.name) }} 

तो सड़क के नीचे आप फार्म का एक उदाहरण में लेबल चाहता था, लेकिन अन्य नहीं, बस {{ form_label(form.name) }} जोड़ने पर्याप्त होगा; अपने form_row लिए: जहां के रूप में बदल रहा है array('label' => true) हर जगह

पर लेबल चालू करेंगे आप एक लाइनर के साथ अपने रूप प्रदान कर रहे हैं, तो {{ form(form) }} तो आप symfony docs

+0

मैं इस पूरक के साथ पूरी तरह से सहमत हूं। – moudug

+1

हालांकि, इसके साथ एक छोटा सा नकारात्मक पक्ष है: यदि आप लेआउट का उपयोग कर रहे हैं (जैसे bootstrap_3_horizontal_layout), तो आप इसे तोड़ सकते हैं और प्रतिपादन समस्याएं प्राप्त कर सकते हैं। मैं अपने फॉर्म के लिए लेआउट को ओवरराइट करने के लिए ओपी का सुझाव दूंगा (यह काफी आसान है: [सीएफ। सिम्फनी दस्तावेज] (http://symfony.com/doc/current/form/form_customization.html)) – moudug

0

पर एक नजर है चाहिए बस {झूठी 'लेबल'} जोड़ने()

{{ form_row(form.name, {'label':false}) }} 
संबंधित मुद्दे