数组转换为字符串。Symfony2.7。

4
我有一个下拉菜单,其中包含一些实体和与该实体相关的图标。但当我提交表单时,出现了以下错误:

在文件路径为src\FLY\BookingsBundle\Resources\views\Post\show.html.twig,第38行,在模板渲染期间抛出了异常:“提示:数组转换为字符串”。

CRITICAL - 在C:\xampp\htdocs\Symfony\app\cache\dev\classes.php的4795行处未捕获的PHP异常Twig_Error_Runtime:“在模板的渲染期间发生异常(“Notice: Array to string conversion”),位于“C:\xampp\htdocs\Symfony\src\FLY\BookingsBundle/Resources/views/Post/show.html.twig”的第38行。”。


注意:请确保不要更改原始HTML标记。
class Post
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * @var array
     *
     * @ORM\Column(name="compagny", type="array")
     */
    private $compagny;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }


    /**
     * Set compagny
     *
     * @param array $compagny
     * @return Post
     */
    public function setCompagny($compagny)
    {
        $this->compagny = $compagny;

        return $this;
    }

    /**
     * Get compagny
     *
     * @return array
     */
    public function getCompagny()
    {
        return $this->compagny;
    }
}

.

 ->add('compagny', 'choice', [
                    'required' => true,
                    'multiple' => true,
                    'label' => 'Ex:Emirates airways',
                    'attr' => [
                        'class' => 'form-control myDropdown',
                        'placeholder' => 'Ex:Emirates airways',
                    ]])

.

{% extends '::base.html.twig' %}

{% block body -%}
    <h1>Post</h1>

    <table class="record_properties">
        <tbody>
            <tr>
                <th>Id</th>
                <td>{{ entity.id }}</td>
            </tr>
            <tr>
                <th>Departure</th>
                <td>{{ entity.airport }}</td>
            </tr>
            <tr>
                <th>Arrival</th>
                <td>{{ entity.airport1 }}</td>
            </tr>
            <tr>
                <th>Departuredate</th>
                <td>{{ entity.departuredate|date('Y-m-d H:i:s') }}</td>
            </tr>
            <tr>
                <th>Arrivaldate</th>
                <td>{{ entity.arrivaldate|date('Y-m-d H:i:s') }}</td>
            </tr>

            <tr>
                <th>Compagny</th>
                <td>{{ entity.compagny }}</td>
            </tr>
        </tbody>
    </table>

        <ul class="record_actions">
    <li>
        <a href="{{ path('post') }}">
            Back to the list
        </a>
    </li>
    <li>
        <a href="{{ path('post_edit', { 'id': entity.id }) }}">
            Edit
        </a>
    </li>
    <li>{{ form(delete_form) }}</li>
</ul>
{% endblock %}

new.html.twig

<div class="col-md-2">
    <h4 class="title">Compagny</h4>
    <div class="form-group form-group-lg form-group-icon-left">
        <i class="fa fa-plane input-icon"></i>
        <label>Airlines</label>
        {{ form_widget(form.compagny, { 'attr': {'class': 'form-control myDropdown',} }) }}
        {{ form_errors(form.compagny) }}
    </div>
</div>

你在TWIG文件中遇到了这个错误,但是在你的问题中缺少了相关信息。请将其添加到你的问题中。 - KhorneHoly
@KhorneHoly,我在我的问题中添加了我的twig文件。 - Sirius
我不太明白你在这里尝试做什么,但错误出现在这一行 {{ entity.compagny }}compagny 是你的实体中定义的一个数组,所以它不能被Twig直接输出。也许 Compagny 不是一个数组,而你本来想在这个列中使用另一种数据类型,比如文本? - Dan Mironis
我正在尝试在提交表单后,在下一页中呈现公司名称+图标。我已经将multiple => true删除了,我不再有错误,但是数据没有保存到数据库中,也没有呈现到下一页。为什么它不起作用? - Sirius
所以,只是为了理解。每个帖子可能有一个公司数组?而公司是一个数组,如果公司是选定的值,那么从哪里可以找到完整的对象列表,你期望选择一些呢? - abdiel
1个回答

5
你的$compagny属性是一个数组,就像你在注释中定义的一样:
/**
 * @var array
 *
 * @ORM\Column(name="compagny", type="array")
 */

阅读Doctrine文档,这个数组将在存储到数据库之前被序列化。

你不能直接在Twig中渲染它。

你需要使用for逐一显示数组中的每个项目。

<ul>
{% for item in entity.compagny %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

我尝试了您的示例,但在提交数据后仍然为空。 - Sirius
@Sirius,你能否在 if ($form->isValid()) 中加入 dump($form->getData()) 来查看你实际得到的数据? - Phoenix
这是我得到的,你可以检查链接中的屏幕截图:[链接](http://www.noelshack.com/2015-52-1450800517-tes.png) - Sirius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接