Symfony 轻松管理如何将 DateTimeField 与当前日期进行比较

问题描述 投票:0回答:1

我第一次使用简单的管理包为项目编写后端,但在修改 CRUD 控制器以满足我的需求时遇到了困难。 我有一个具有预期归还日期字段的借款实体。我想要的是,如果预期的当前日期已过,则 crud 控制器中该字段的文本将显示为红色。

我尝试了以下代码,但它不起作用:

<?php

namespace App\Controller\Admin;

use App\Entity\Borrowing;
use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;

class BorrowingCrudController extends AbstractCrudController
{
    public static function getEntityFqcn(): string
    {
        return Borrowing::class;
    }


    public function configureFields(string $pageName): iterable
    {
        $id = IntegerField::new('id');

        $prolongated = BooleanField::new('prolongated');

        $borrowingDate = DateTimeField::new('borrowingDate')
            ->formatValue(function ($value) {
                return $value->format('Y-m-d');
            });

        $currentDate = new \DateTime();

        $cssClass = DateTimeField::new('expectedReturnDate') < $currentDate ? 'text-danger' : '';

        $expectedReturnDate = DateTimeField::new('expectedReturnDate')->formatValue(function ($value) {
            return $value->format('Y-m-d');
        })
            ->setCssClass($cssClass);

        $finalReturnDate = DateTimeField::new('finalReturnDate')->formatValue(function ($value) {
            if ($value === null) {
                return null;
            } else {
                return $value->format('Y-m-d');
            }
        });

        $fieldsArray = [
            $id,
            $prolongated,
            $borrowingDate,
            $expectedReturnDate,
            $finalReturnDate
        ];
        
        return $fieldsArray;
    }
}

我尝试 dd(DateTimeField::new('expectedReturnDate')) 看看为什么它不起作用,但奇怪的是我得到的只是一个 dto 对象,而且我找不到如何访问它的值。我尝试了一切,但我没有主意。帮助将不胜感激。 预先感谢。

symfony crud easyadmin
1个回答
0
投票

您无法从

DateTimeField::new('expectedReturnDate')
获取日期值,它仅返回一个简单的管理字段,该字段是用于配置您的字段的 DTO 对象。

顺便说一下,你可以使用yield,因为configureFields需要一个可迭代的,这将是一个更干净的方法。

在您的情况下,您可能需要创建一个自定义模板来处理字段应如何以及何时变为红色。因此,请使用 addTemplatePath 添加新的自定义模板来处理您的用例。

public function configureFields(string $pageName): iterable
{
    yield IntegerField::new('id');

    yield BooleanField::new('prolongated');

    yield DateTimeField::new('borrowingDate')
        ->setFormat('Y-m-d');
    yield DateTimeField::new('expectedReturnDate')
        ->setTemplatePath('admin/field/date_expected_return.html.twig')
        ->setFormat('Y-m-d');

    yield DateTimeField::new('finalReturnDate')
        ->setFormat('Y-m-d');
}

还有你的新树枝文件:

{# admin/field/date_expected_return.html.twig #}
{% if field.value > 'now'|date() %}
    <span class="text-danger">{{ field.value }}</span>
{% else %}
    <span>{{ field.value }}</span>
{% endif %}

您可能需要检查如何获取模板中的值,我不记得它是否真的是 field.value,但您可以 {{ dump(field) }} 并根据需要更新模板。

如果您不知道,可以在简单的管理仪表板配置中配置默认日期时间格式。而不是到处设置格式。

© www.soinside.com 2019 - 2024. All rights reserved.