Мой проект Symfony настроен довольно аккуратно, но я боролся с одной этой проблемой.
У меня есть класс App/Entity/User
, который используется для заполнения пользовательской информации из базы данных
class User implements AdvancedUserInterface, \Serializable
{
public function __construct()
{
$this->forumPermission = new ArrayCollection();
$this->activities = new ArrayCollection();
}
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(
* type="string",
* name="salt",
* length=32
* )
*/
private $salt = "";
/**
* @ORM\Column(
* type="string",
* length=75,
* name="user_name"
* )
* @Assert\NotBlank(
* message="De gebruikersnaam moet ingevuld zijn"
* )
*/
private $username;
// ...
}
и правильно связаны в security.yaml
security:
# https://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
db_provider:
entity:
class: App\Entity\User
property: username
Однако, если пользователь не вошел в систему, он считается анонимным.Что мне показалось бы удобным, так это то, что анонимный пользователь имел бы собственный экземпляр User, но вместо этого $this->getUser() === null
.Я понимаю, почему, но я упрямый:
У меня есть базовый контроллер, который я наследую от всех других моих контроллеров:
abstract class BaseController extends Controller
{
protected $logger = null;
protected $globals = null;
protected $translator = null;
protected $security = null;
/* @var $currentUser User */
protected $currentUser = null;
public function __construct(
Globals $globals,
LoggerInterface $logger,
TranslatorInterface $translator,
Security $security
) {
$this->logger = $logger;
$this->globals = $globals;
$this->translator = $translator;
$this->currentUser = $security->getUser();
}
protected function getUser() {
if (!$this->currentUser instanceof User) {
/* @var $anonForumPerm ForumPermission */
$anonForumPerm = $this->getDoctrine()->getRepository(ForumPermission::class)->find(5);
$this->currentUser = new User();
$this->currentUser->setName('Anonymous')
->setSurname('User')
->setUsername('anon.')
->setForumPermission($anonForumPerm)
;
}
return $this->currentUser;
}
// ...
}
Это, кажется, работает, но единственная проблема, которая у меня естьтеперь app.user
ветки, которая остается нулевой.
Есть ли способ подтолкнуть $this->currentUser
к app.user
в ветке?Или есть лучший способ обработки анонимных пользователей?
Моя теория состоит в том, что я хочу иметь возможность выбирать между app.user
ИЛИ IS_AUTHENTICATED_FULLY
независимо от того, вошел ли пользователь в систему.
Был бы признателен за дополнительный вклад