在 EasyAdmin 3 / Symfony 5.2 后端,我有几个带有日期时间字段的 *CrudController 类,它们的配置如下:
public function configureFields(string $pageName): iterable
{
return [
// ...
DateTimeField::new('createdAt')
->setTimezone($this->getUser()->getTimezone())
->setFormTypeOption('view_timezone', $this->getUser()->getTimezone()),
];
}
不是为每个实体的每个日期时间字段复制粘贴相同的代码,有没有办法将时区定义为默认值?
编辑:
我发现setTimezone()
可以为整个 *CrudController 类调用一次,ConfigureCrud()
默认情况下这适用于所有字段:
class MyCrudController extends AbstractCrudController
{
public function configureCrud(Crud $crud): Crud
{
return $crud->setTimezone($this->getUser()->getTimezone());
}
}
实际上,它甚至可以在仪表板上设置为默认应用于其所有 crud 控制器及其字段。
class DashboardController extends AbstractDashboardController
{
public function configureCrud(): Crud
{
// Default config for all cruds in this controller.
// Only impact index and detail actions.
// For Forms, use ->setFormTypeOption('view_timezone', '...')
// on all fields
return Crud::new()->setTimezone($this->getUser()->getTimezone());
}
}
因此,configureCrud()
DashboardController 类中的 是索引和详细信息操作的最简单解决方案。
我仍然对在setFormTypeOption('view_timezone', '...')
每个领域都有类似的解决方案感兴趣。