1

Symfony 2.1.3でSonata adminを使用しています。Googleマップでテキスト入力を追加しようとしています。

関数に追加された行configureFormFields():

->add('coordinates', 'contentbundle_coordinates_map', array('required' => false,'attr'=>array('class'=>'mapCoordinate')))

サービスに登録し、このためのテンプレートを作成しました:

{% block contentbundle_coordinates_map_widget %}
    <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=true"></script>
    <script type="text/javascript" src="{{ asset('js/add.scripts.js') }}"></script>
    <input type="text" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
    <div id="add_map" class="map" style="width:500px;height:300px;"></div>
{% endblock %}

管理コンテンツ追加ページでマップ付きのフィールドを表示できますが、データを送信したい場合:

Notice: Array to string conversion in D:\my_vendor_folder\doctrine\dbal\lib\Doctrine\DBAL\Statement.php line 103

contentbundle_coordinates_mapnullに変更すると:

->add('coordinates', null, array('required' => false,'attr'=>array('class'=>'mapCoordinate')))

すべてが機能します。

問題はどこだ?

アップデート

フォーム タイプ クラス:

namespace Map\ContentBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class CoordinatesMapType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'contentbundle_coordinates_map';
    }
}
4

1 に答える 1

2

getParent特定のタイプのロジックを継承するには、常にカスタム フォーム タイプのメソッドを定義する必要があります。種類一覧はこちらをご覧ください。

この場合、カスタム タイプがテキストを返すように見えるので、次を に追加しますCoordinatesMapType

public function getParent()
{
    return 'text';
}

別の方法として、フォーム フィールドのレンダリングのみをカスタマイズする必要がある場合は、独自のカスタム フォーム タイプを作成する必要さえありません。個別フィールドをカスタマイズする方法を参照してください。これは、フォームに手動で名前を付けた場合にのみ可能だと思います。(その名前が「コンテンツ」であると仮定)

{# This is in the view where you're rendering the form #}

{% form_theme form _self %}

{% block _content_coordinates_widget %}
    <div class="text_widget">
        <script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=true"></script>
        <script type="text/javascript" src="{{ asset('js/add.scripts.js') }}"></script>
        <input type="text" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
        <div id="add_map" class="map" style="width:500px;height:300px;"></div>
    </div>
{% endblock %}

この場合、null2 番目の例のように、タイプを として指定します。

->add('coordinates', null, array('required' => false,'attr'=>array('class'=>'mapCoordinate')))
于 2012-12-19T09:48:36.540 に答える