要在表单中获取当前用户对象(或ID),实际上有多种方式。其中之一是通过表单的选项
$form = $this->createForm(MyFormType::class, $obj, [
'user' => $this->getUser(),
]);
进行设置,并能够与像这样的默认值null
的选项。现在
class MyFormType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => '...',
'user' => null,
]);
}
可以在buildForm()
内使用$options['user']
(请务必检查它是否null
或不使用之前)。
但是这种方式你必须总是自己注入用户 - 为什么不让Symfony照顾它呢?首先,注册形式为服务services.yml像这样
app.form.myform:
class: AppBundle\Form\MyFormType
arguments: ["@security.token_storage"]
tags:
- { name: form.type }
你看,我已经添加了另一件事:@security.token_storage
说法。现在,在你的窗体中添加一个构造函数
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class MyFormType extends AbstractType
{
protected $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
并在buildForm()
检索用户现在会那么容易,因为
$user = $this->tokenStorage->getToken()->getUser();
谢谢。通过第一种解决方案,我得到了'用户'选项不存在。在调用createForm之前,我已经将用户添加为$ obj('$ obj-> user = $ this-> getUser()')的属性。 –
@the_nuts我更新了我的答案,当然您需要启用选项能够使用它。 – kero