要在表單中獲取當前用戶對象(或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