5

多分私は何かを見落としているかもしれません。うまくいけば、これは非常に簡単に行われます。

私はフォームを持っており、最終的に欲しいのは次の結果です:

次のフィールド:

  • 必須/必要です
  • 現在エラーがあります
  • 助けて

ラベルの後に追加の -Tag と追加の divを取得し、a該当する場合はヘルプやエラーで埋めます。

私がやるべきことは、必須フィールドがaこれを使用して -Tag を取得することです:

{% use 'form_div_layout.html.twig' with field_label as base_field_label %}

{% block field_label %}
    {{ block('base_field_label') }}

    {% if required %}
        <a href=""><span>&nbsp;</span></a>
    {% endif %}
{% endblock %}

だから、私がすでに試したのは、これの異なるバージョンでした:

{% use 'form_div_layout.html.twig' with field_label as base_field_label %}

{% block field_label %}
    {{ block('base_field_label') }}

    {% if required or help is defined %}
        <a href=""><span>&nbsp;</span></a>
    {% endif %}
{% endblock %}

{% block field_row %}
    {% spaceless %}
        <div class="row">
            {% if required or help is defined %}
                <div>
                    {{ form_errors(form) }}
                    {{ help }}
                </div>
            {% endif %}

            {{ form_label(form) }}
            {{ form_widget(form, { 'attr': {'class': 'grid_4'} }) }}
        </div>          
    {% endspaceless %}
{% endblock field_row %}

そして、私はこれを機能させることができません。

だから私の質問は:

  • HTML を含むこともあるヘルプ テキストはどこから入手できますか? 私は成功せずにこれを試しましform builderたが、少なくとも例外があります:

    $builder    ->add('subject', 'text', array(
        'label' => 'Subject',
        'help' => 'Can be formatted content with <strong>HTML-Elements</strong>',
        ));
    
  • 現在のフィールドにエラーがあること (行にクラスを追加するため) を確認するにはどうすればよいですか? また、エラーがある場合は表示することもできますか? {{ form_errors(form) }}「field_row˚」内のどこに配置しても、何も出力されませんでした。

4

2 に答える 2

6

ヘルプ テキストはありません。フィールドのフォーム拡張機能を作成し、デフォルト オプションに追加する必要があります。

SF 2.1 ベータ 1 の例:

namespace Webility\Bundle\WebilityBundle\Form\Extension;

use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormViewInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class HelpFormTypeExtension extends AbstractTypeExtension
{

    public function buildView(FormViewInterface $view, FormInterface $form, array $options){
        $view->setVar('help', $options['help']);
    }

    public function getExtendedType(){
        return 'field';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array(
            'help' => null
        ));
    }
}

そしてそれをサービスとして登録します:

<service id="webility.form.extension.help" class="Webility\Bundle\WebilityBundle\Form\Extension\HelpFormTypeExtension">
        <tag name="form.type_extension" alias="field" />
</service> 

エラーに関する質問: 印刷するエラーはありますか? 検証が失敗した場合は、コントローラーで次のことを確認してください。

echo '<pre>'; print_r( $form->getErrorsAsString() ); echo '</pre>'; exit;
于 2012-07-13T07:43:08.600 に答える
0

私の質問で述べたように解決するには、Maciej Pyszyński の anwserが非常に役に立ちました。

この場合、別の方法で解決しました。これもここに投稿したいと思います。マニュアル「「ヘルプ」メッセージの追加」によると、私はこれを構築します:

注:このソリューションは と一緒には機能せずformbuilder、twig で微調整する必要があります。

'' タグのヘルプを取得するには (実際には現在は div になっています) …</h3>
{% block field_label %}
    {{ block('base_field_label') }}

    {% if attr.class is defined and '_hint' == attr.class %}
        <div>
            <a><span class="help">Help Icon</span></a>
            <div class="tooltip">
                {% if help is defined %}
                    {{ help|raw }}
                {% else %}
                    Somebody forgot to insert the help message
                {% endif %}
            </div>
        </div>
    {% endif %}
{% endblock %}

エラー時に適切なクラスを取得するには

{% block field_row %}
    {% spaceless %}
        <div class="row{% if form_errors(form) %} error{% endif %}">
            {{ form_label(form) }}
            {{ form_widget(form, { 'attr': {'class': 'grid_4'} }) }}
        </div>
    {% endspaceless %}
{% endblock field_row %}

そして、テンプレートからの呼び出し

<div class="row{% if form_errors(form.url) %} _error{% endif %}">
    {{ form_label(form.field, null, { 'attr': {'class': '_hint'}, 'help': 'Help text or variable containing it' }) }}
    {{ form_widget(form.field, { 'attr': {'class': 'grid_4'} }) }}
</div>
于 2012-07-19T08:41:42.947 に答える