Как я могу использовать __toString () с формой в Symfony 2? - PullRequest
4 голосов
/ 16 сентября 2011

Я получаю эту ошибку:

Объекты, передаваемые в поле выбора, должны иметь метод "__toString ()" определены (или вы также можете переопределить опцию "свойство").

Меня это не смущает, поскольку поля, которые я пытаюсь отобразить, когда получаю эту ошибку, являются INT или BIGINT. Что меня смущает, так это где я должен использовать __toString () по отношению к полю?

Кроме того, что это за опция "свойство", в сообщении об ошибке сказано, что я могу переопределить?

Приветствия

EDIT:

Вот код, который отображает форму:

public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('id');
        $builder->add('title');
        $builder->add('slug');
        $builder->add('content');
        $builder->add('keywords');
        $builder->add('contenttype');
        $builder->add('hits');
        $builder->add('mainpage');
        $builder->add('hasmainpage');
        $builder->add('ismainpage');
    }

Вот код в моем классе Controller, который обрабатывает это:

    $pageadd = new Content();
    $form = $this->createForm(new PageAdd(), $pageadd);

    $request = $this->getRequest();
    if ($request->getMethod() == 'GET') {
        $form->bindRequest($request);

        if ($form->isValid()) {

            $em = $this->getDoctrine()
                       ->getEntityManager();
            $em->persist($pageadd);
            $em->flush();

            return $this->redirect($this->generateUrl('ShoutAdminBundle_add'));
        }
    }

    return $this->render('ShoutAdminBundle:Default:pageadd.html.twig', array(
        'form' => $form->createView()
    ));

А вот код, который находится в моем файле Twig:

        <form action="{{ path('ShoutAdminBundle_adminpageadd') }}" method="post" {{ form_enctype(form) }} class="blogger">
            {{ form_errors(form) }}

            <p class="row">
                {{ form_label(form.id, 'ID*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.id) }}
                {{ form_widget(form.id, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.title, 'Title*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.title) }}
                {{ form_widget(form.title, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.slug, 'Slug*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.slug) }}
                {{ form_widget(form.slug, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.content, 'Content*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.content) }}
                {{ form_widget(form.content, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.keywords, 'Keywords*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.keywords) }}
                {{ form_widget(form.keywords, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.contenttype, 'Content Type*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.contenttype) }}
                {{ form_widget(form.contenttype, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.hits, 'Hits*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.hits) }}
                {{ form_widget(form.hits, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.mainpage, 'Main Page*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.mainpage) }}
                {{ form_widget(form.mainpage, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.hasmainpage, 'Has Main Page*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.hasmainpage) }}
                {{ form_widget(form.hasmainpage, { 'attr': {'class': 'textfield'}}) }}
            </p>
            <p class="row">
                {{ form_label(form.ismainpage, 'Is Main Page*', { 'attr': {'class': 'title'} }) }}
                {{ form_errors(form.ismainpage) }}
                {{ form_widget(form.ismainpage, { 'attr': {'class': 'textfield'}}) }}
            </p>

            {{ form_rest(form) }}
            <p class="row">
                <input type="submit" value="Save This Page" class="savebutton" />
            </p>
        </form>

Ответы [ 2 ]

15 голосов
/ 16 сентября 2011

Я решил, благодаря этому сообщению в блоге .

Сначала я воспользовался вашим советом greg0ire, но все равно получил ошибку. Однако я добавил:

$builder->add('hasmainpage','entity', array('class'=>'Shout\AdminBundle\Entity\Admin', 'property'=>'id', ));

Что я понял (я не знал во время написания исходного вопроса), так это то, что ошибка произошла из-за того, что к полю было привязано отношение, а когда он попытался отобразить поле, он не смог из-за отношения.

Теперь все исправлено, к счастью!

0 голосов
/ 16 сентября 2011

Я полагаю, что параметр свойства должен быть заполнен именем свойства, которое вы хотите получить при отображении объекта. Я не понимаю, что вы не запутались, когда получаете эту ошибку и отображаете только INT или BIGINT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...