我希望用户能够手动输入将保存到数据库的日期。我的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是字符串,对象给定
我解决了这个问题。我用了这个: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']);
看起来您有$月['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工作时,我不喜欢这样,因为使用可以输入该字段中的任何文本。 最好的方法是什么?保留输入=日期并