我的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
我觉得方便的是匿名用户可以拥有自己的用户实例,但是
$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
应用程序用户
在树枝上?
我的理论是,我想在
应用程序用户
或者
IS_AUTHENTICATED_FULLY
如有额外意见,将不胜感激