当前位置: 首页 > 知识库问答 >
问题:

Symfony2-插入日期类型为的数据

丁嘉
2023-03-14

我希望用户能够手动输入将保存到数据库的日期。我的MonthType看起来像:

class MonthType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    $builder->add(
        'name',
        TextType::class,
        [
            'label' => 'label.name',
            'required' => true,
            'attr' => [
                'max_length' => 128,
            ],
        ]
    );
    $builder->add(
        'dateStart',
        DateType::class,
        [
            'label' => 'label.dateStart',
            'format' => 'yyyy-MM-dd',
        ]
    );
    $builder->add(
        'dateEnd',
        DateType::class,
        [
            'label' => 'label.dateEnd',
            'format' => 'yyyy-MM-dd',

        ]
    );
    $builder->add(
        'upper_limit',
        MoneyType::class,
        [
            'label' => 'label.upper_limit',
            'currency' => false,
            'required' => true,
        ]
    );
    }
} 

我的控制器看起来像:

class MonthController implements ControllerProviderInterface
{

    public function connect(Application $app)
    {
        $controller->match('/add', [$this, 'addAction'])
            ->method('POST|GET')
            ->bind('month_add');

        return $controller;
    }
    /**
    * Add action.
    */
    public function addAction(Application $app, Request $request)                               
    {
        $month = [];
        $userRepository = new UserRepository($app['db']);

        $token = $app['security.token_storage']->getToken();
        if (null !== $token) {
            $user = $token->getUser();
            $userLogin = $user->getUsername();
        }

        $form = $app['form.factory']->createBuilder(MonthType::class, $month)->getForm();
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $monthRepository = new MonthRepository($app['db']);
            $monthRepository->save($form->getData(), $userLogin);

            $app['session']->getFlashBag()->add(
                'messages',
                [
                    'type' => 'success',
                    'message' => 'message.element_successfully_added',
                ]
            );

            return $app->redirect($app['url_generator']->generate('month_index'), 301);
        }

        return $app['twig']->render(
            'history/add.html.twig',
            [
                'month' => $month,
                'form' => $form->createView(),
                'user_id' => $userRepository->findUserId($userLogin),
            ]
        );
    }
}

在存储库中,我有:

/**
 * Save record.
 */
public function save($month, $userLogin)
{
    $user_id = $this -> findUserIdByLogin($userLogin);
    $month['user_id'] = $user_id;
    $month['remained'] = $month['upper_limit'];

    if (isset($month['id']) && ctype_digit((string) $month['id']) && isset($user_id)) {
        // update record
        $id = $month['id'];
        unset($month['id']);

        return $this->db->update('month', $month, ['id' => $id]);
    } else {
        // add new record
        return $this->db->insert('month', $month);
    }
}

当我试图保存记录我得到一个错误:一个异常发生在执行'插入到月份(名称,日期开始,日期结束,upper_limit,user_id,保留)值 (?, ?, ?, ?, ?, ?)'使用参数["2012年6月",{"date":"2012-06-01 00:00:00.000000","timezone_type":3,"时区":"欧洲/柏林"},{"date":"2012-06-30 00:00:00.000000","timezone_type":3,"时区":"欧洲/柏林"},7600,"1",7600]:

可捕获的致命错误:类DateTime的对象无法转换为字符串

所以我试着做这样的事情:

    public function save($month, $userLogin)
    {
        $user_id = $this -> findUserIdByLogin($userLogin);
        $month['user_id'] = $user_id;
        $month['remained'] = $month['upper_limit'];

        $dateStart = new \DateTime($month['dateStart']);
        $month['dateStart'] = $dateStart->format('Y-m-d');
        $dateEnd = new \DateTime($month['dateEnd']);
        $month['dateEnd'] = $dateEnd->format('Y-m-d');
        ...//
    }

但我收到:DateTime::__construct()期望参数1是字符串,对象给定

共有2个答案

陆宾白
2023-03-14

我解决了这个问题。我用了这个:http://symfony.com/blog/new-in-symfony-3-1-datetime-normalizer写

$serializer = new Serializer(array(new DateTimeNormalizer('Y-m-d')));
$month['dateStart'] = $serializer->normalize($month['dateStart']);
$serializer = new Serializer(array(new DateTimeNormalizer('Y-m-d')));
$month['dateEnd'] = $serializer->normalize($month['dateEnd']);
哈翔
2023-03-14

看起来您有$月['dateStart']$月['dateend']作为DateTime(查看数据库异常{"date":"2012-06-01 00:00:00.000000","timezone_type": 3,"timezone":"Europe/柏林"})。

因此,您可以直接使用as$dateStart$dateEnd,因为:

$month['dateStart']-

 类似资料:
  • insertDate(int $row, int $column, int $timestamp[, string $dateFormat = 'yyyy-mm-dd hh:mm:ss', resource $formatHandler]) int $row $excel = new \Vtiful\Kernel\Excel($config); ​ $dateFile = $excel->fil

  • 问题内容: 我需要找出一种将带有字段的记录插入数据库的方法,但我陷入了困境。 有谁知道我该怎么做?现在我有类似的东西。 但是,当我运行类似这样的命令时,出现错误:值的字符串表示形式的语法不正确。 这是sql语句的样子: 谢谢 问题答案: 当然,这将使你的代码更好,但是要回答你的问题,你需要告诉的字符串表示形式。在中(你不指定数据库供应商的名称),使用以下函数将字符串日期转换为:

  • 问题内容: 我有一个熊猫数据框,其中一列包含格式为日期的字符串 例如 目前该列的是。 如何将列值转换为Pandas日期格式? 问题答案: 使用类型

  • 问题内容: 我想在python中创建一个类,它应该像这样工作: 分配的数据,可能绑定到变量(例如或) 插入数据后,它应自动确定数据的某些属性,如果某些属性被填充,它将自动… …将班级改为另一个班级 第三部分是我有问题的部分。我如何真正改变班级内部的班级?例如: 如果我有两个班级,一个是,另一个是;现在我希望将小于1000的任何内容转换为a ,反之亦然,测试代码: 这可能吗? 问题答案: 使用工厂方

  • 问题内容: 我需要将日期添加到我的实体中,然后让用户以Web形式进行设置。默认情况下,此字段需要填写今天的日期。 显示正确的默认日期设置 显示没有任何值的日期选择器(注意:String startDate =“ 2016-08-01”;) 生成400错误(错误请求)(注意:Date startDate = new Date();) 因此,问题是:如何使用百里香作为输入日期? 如何使用Date()数

  • 我有一个带有日期字段的Laravel应用程序。 当我使用“type=text”时 我获取存储在数据库中的值。 当我使用“type=date”时 我得到dd/mm/yyyy和一个下拉列表(datepicker)来为每一个选择一个数字。我本以为dd、mm和yyyy会预先填充我数据库中的日期。 当输入=text工作时,我不喜欢这样,因为使用可以输入该字段中的任何文本。 最好的方法是什么?保留输入=日期并