我正在使用表列以 Unix 时间戳格式(基本上是长度为 11 的整数)存储“date_of_creation”(或 created_at)。
同时,我想在我的创建/编辑网络表单(Bootstrap Datepicker)中使用 DateTime 格式“dmY”处理这个值。
这是问题:
在期望接收整数的表列上转换和保留以 DateTime 格式传递的值的最佳方法是什么,反之亦然,用其相应的 DateTime 格式覆盖表单字段默认值“时间戳格式”(以使其可识别日期选择器)?
我正在使用 Symfony 3.3.5 和 Twig。
这是一个例子:
我已经使用了一种解决方法来达到范围,但我不是 100% 确定这是一个好习惯......
FormType.php 添加一个带有类的文本字段以挂钩 DatePicker 小部件:
->add('createdAt', TextType::class, [
'attr' => [
'class' => 'js-datepicker'
],
])
Run Code Online (Sandbox Code Playgroud)
实体设置器看起来像这样:
/**
* @param mixed $createdAt
*/
public function setCreatedAt($createdAt, $stringToTime = true)
{
$this->createdAt = ($stringToTime) ? strtotime($createdAt) : $createdAt;
}
Run Code Online (Sandbox Code Playgroud)
这里真正的技巧是额外的 $stringToTime 参数。
最后是controllerAction:
/**
* @Route("/content/edit/{id}", name="admin_content_edit")
*/
public function editContentAction(Request $request, Content $content)
{ …
Run Code Online (Sandbox Code Playgroud) 我有一个关于Symfony 2.3上的Doctrine和实体的问题。
按照V2.3 “文档书”一章“数据库和学说” >保存相关的实体,该示例同时创建两个新行product
和category
表和同事 product.category_id
值与id
新的类别的项目。
问题是控制器动作在任何时候被调用时都会创建一个新的产品和一个新的类别!
为了只创建一个新产品并将其category_id
与现有类别 相关联id
,这是routing.yml路由:
acme_store_create_product_by_category:
path: /create/newproduct/{name}/{categoryId}
defaults: { _controller: AcmeStoreBundle:Default:createProduct }
Run Code Online (Sandbox Code Playgroud)
我做了一个通过 URL 传递参数的测试:
/web/store/create/newproduct/Kayak/12
我做了这样的事情,这似乎工作正常:
public function createProductAction($name, $categoryId)
{
$em = $this->getDoctrine()->getManager();
if ( $em->getRepository("AcmeStoreBundle:Category")->findOneById($categoryId) ) {
$product = new Product();
$product->setName($name);
$product->setPrice(220);
$product->setDescription("This is just a test");
$em->persist($product);
$em->flush();
$newproduct = $em->getRepository("AcmeStoreBundle:Product")->find($product->getId()); …
Run Code Online (Sandbox Code Playgroud)