我想知道如何執行一個實體的選民內的字段檢查。與symfony中的選民單場檢查
我有例如我的實體發佈,我希望用戶不是管理員不能編輯標題字段。只有管理員可以編輯此字段。
所以我創建了我的選民,但我不知道如何,因爲裏面$post
有老後的實體創建這樣的檢查,我不知道如何實現在檢查title
場
這是我的簡單選民檔案
class PostVoter extends Voter
{
const VIEW = 'view';
const EDIT = 'edit';
private $decisionManager;
public function __construct(AccessDecisionManagerInterface $decisionManager)
{
$this->decisionManager = $decisionManager;
}
protected function supports($attribute, $subject)
{
if (!in_array($attribute, array(self::VIEW, self::EDIT))) {
return false;
}
if (!$subject instanceof Post) {
return false;
}
return true;
}
protected function voteOnAttribute(
$attribute,
$subject,
TokenInterface $token
) {
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
if ($this->decisionManager->decide($token, array('ROLE_SUPER_ADMIN'))) {
return true;
}
/** @var Post $post */
$post = $subject;
switch ($attribute) {
case self::VIEW:
return $this->canView($post, $user);
case self::EDIT:
return $this->canEdit($post, $user);
}
throw new \LogicException('This code should not be reached!');
}
private function canView(Post $post, User $user)
{
if ($this->canEdit($post, $user)) {
return true;
}
return true;
}
private function canEdit(Post $post, User $user)
{
return $user === $post->getUser();
}
}
我想在canEdit中實現一個標題欄檢查。 我試圖打印$發佈,但只有舊值不是一些新的價值信息。
只是爲了澄清,你試圖確定標題已從選民內部改變? – Cerad
是的,或者如果不是更好的方式告訴我,我將這個邏輯移動到控制器或服務中。我不知道如何檢查字段 –