我在Symfony 3.3中有一个自定义表单,其中包含以下信息:
$builder->add('frecuency', TextType::class, array('required' => false,
'label' => 'Execution Frecuency: '))
->add('save_submit', SubmitType::class,
array('label' => 'Save'));
我不再需要此表单上的字段,但此信息来自以下具有更多字段的实体:
/**
(...)
class SrvrsServers
{
/**
* @var string
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue
*/
private $id;
(...)
/**
* @var string
*
* @ORM\Column(name="frequency", type="integer", nullable=true)
*/
private $frequency;
然后我的问题是如果表格完全是自定义的,那么如何从数据库填充此字段frecuency
。
我的控制器现在看起来像这样:
/**
* @Route("/server/{id}", name="edit_server")
*/
public function editAction ($id){
$server = $this->getDoctrine()->getRepository('NCbrtBundle:SrvrsServers')
->find($id);
if (!$server) {
throw $this->createNotFoundException('Server not found for ID: '. $id);
}
$form = $this->createForm(ServerType::class);
return $this->render('NCbrtBundle:Server:server.html.twig', array(
'form' => $form->createView(),
'server' => $server,
));
}
我不知道如何或在何处将此信息提供给表单以及如何编写它。还有一个问题,我需要过滤来自数据库的信息,并根据值添加或修改它。该字段存储在几秒钟内,我需要以人类可读的格式存储它,如分钟,小时或天。我已经有了这样做的函数(类),但到目前为止还无法使用它。有人可以帮忙吗?
答案 0 :(得分:1)
您可以使用Data Transformer将字段的数据转换为可以在表单中显示的格式(并在提交时返回)。
public function buildForm(FormBuilderInterface $builder, array $options)
{
//...
$builder->add('frecuency', TextType::class, array(
'required' => false,
'label' => 'Execution Frecuency: ')
)
//...
$builder->get('frecuency')
->addModelTransformer(new CallbackTransformer(
function ($hashToReadableString) {
// make readable string from hash
$readableString = MyLib::unHash($hashToReadableString);
return $readableString;
},
function ($readableStringToHash) {
// transform the readable string back to a hash string
$hashString = MyLib::hash($readableStringToHash);
return $hashString;
}
))
;
}
CallbackTransformer将两个回调函数作为参数。第一个将原始值转换为将用于渲染字段的格式。第二种方法是相反的:它将提交的值转换回您将在代码中使用的格式。