Чтобы получить текущий пользовательский объект (или идентификатор) в форме, существует несколько способов. Можно было бы установить его с помощью опции формы в
$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,
]);
}
Теперь вы можете использовать $options['user']
в buildForm()
(убедитесь, чтобы проверить, если это 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();
Спасибо. С первым решением я получил «Пользователь», «Пользователь» не существует. ». Я добавил пользователя как свойство $ obj ('$ obj-> user = $ this-> getUser()' перед вызовом createForm) –
@the_nuts Я обновил свой ответ, конечно, вам нужно включить опцию способный использовать его. – kero