获取匿名用户的用户实例



我的symfony项目设置得非常整齐,但我一直在为这件事而苦苦挣扎。

我有一个App/Entity/User类,用于从数据库中填充用户信息

class User implements AdvancedUserInterface, Serializable
{
public function __construct()
{
$this->forumPermission = new ArrayCollection();
$this->activities = new ArrayCollection();
}
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMColumn(
*     type="string",
*     name="salt",
*     length=32
* )
*/
private $salt = "";
/**
* @ORMColumn(
*     type="string",
*     length=75,
*     name="user_name"
* )
* @AssertNotBlank(
*     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: AppEntityUser
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;
}
// ...
}

这似乎有效,但我现在唯一的问题是 twig 的app.user它仍然为空。

有没有办法把$this->currentUser推到树枝上app.user? 还是有更好的方法来处理匿名用户?

我的理论是,我希望能够在app.userIS_AUTHENTICATED_FULLY之间进行选择,无论用户是否尚未登录。

一些额外的投入将不胜感激

我以前也遇到过这个问题,这是我的经验中的一些额外输入。

如果您网站的访问者没有登录,Symfony会给他一个AnonymousToken{{ app.token.user }}可以在树枝中获取,返回字符串anon.

您可以做的另一种方法是简单地检查{{ app.user }}是否null

最新更新