加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用选择表单类型的数组到字符串转换错误

发布时间:2020-12-13 16:33:49 所属栏目:PHP教程 来源:网络整理
导读:我正在做的事情: 我有一个数据库,其中包含表“团队”和属性“工作日”.我生成了我的学说实体,现在我正在构建一个Symfony2表单. 我想将工作日的数组保存到团队表中的工作日属性中. weekdays属性是VARCHAR(255),因此它应该能够包含字符串数组.我使用选择类型,
我正在做的事情:

我有一个数据库,其中包含表“团队”和属性“工作日”.我生成了我的学说实体,现在我正在构建一个Symfony2表单.

我想将工作日的数组保存到团队表中的工作日属性中. weekdays属性是VARCHAR(255),因此它应该能够包含字符串数组.我使用选择类型,但在提交表单时我得到一个数组到字符串转换错误.

我在做什么:

我使用了Symfony2选择formtype(带有多个选项),因为团队可以在工作日选择几个工作日.我首先检索了我的团队对象数据.然后我做这样的表格:

$builder = $this->createFormBuilder($team);
$form = $builder->add('weekday','choice',array(
        'choices' => array(
            'mon'    => 'Monday','tue'    => 'Tuesday','wed'    => 'Wednesday','thu'    => 'Thursday','fri'    => 'Friday','sat'    => 'Saturday','sun'    => 'Sunday',),'multiple' => true,'expanded' => true,'label' => 'Day of the week','label_attr' => array('class' => 'control-label'),'attr' => array('placeholder' => 'Day of the week','size' => '7')
        ))->getForm();

提交表单时,我使用实体管理器将更改保存到数据库:

if ($request->isMethod('POST')) {
    $form->bind($request);

    if ($form->isValid()) {

        // Save changes to db
        $em = $this->getDoctrine()->getManager();
        $em->persist($team);
        $em->flush();

        // Redirect to new canonical url
        return $this->redirect($this->generateUrl('team_edit',array('nameCanonical' => $team->getNameCanonical(),'code' => $team->getCode())));
    }

错误:

这对我来说似乎是100%有效的代码.我在symfony2中制作了其他形式.但是当我在表单中选择一个或多个工作日,然后提交时,我收到此错误:

An exception occurred while executing ‘UPDATE teams SET weekday = ?
WHERE id = ?’ with params {“1”:[“mon”,”tue”,”wed”],”2″:6}:

Notice: Array to string conversion in
/Users/username/Dropbox/www/projectname/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php
line 1211

(Full error page here)

我想不出办法解决这个问题.帮助赞赏!
我的完整代码是可见的on this gist.

您需要做的是将属性的类型设置为数组,并且Doctrine会为您处理(反)序列化.
class Team
{
    /**
     * @ORMColumn(type="array")
     */
    protected $weekdays;

    /* Some more code */
}

所有可能类型的列表都可以在官方documentation中找到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读