在基本视图(树枝)+ symfony2 中使用数据库中的数据

Posted

技术标签:

【中文标题】在基本视图(树枝)+ symfony2 中使用数据库中的数据【英文标题】:Use data from database in base view (twig) + symfony2 【发布时间】:2014-01-20 10:59:18 【问题描述】:

我在每个页面上都使用了一个基本视图。在我的基本观点中,我有:

<div class="container">
    % block body %
    % endblock %
</div>

每页正文的来源。在我的基本视图中,我还有一个导航。现在我想根据登录用户的一些数据显示一个按钮。

这是我的情况:

我有一个表 players 有一个 FK user_id 和一个 FK team_iduser_id 指的是我的user 表,其中保存了username, password, ...。现在我想根据玩家表中的 team_id 显示按钮是否为 NULL。

所以我需要这样的东西:

if(is_null($user->getPlayer()->getTeam())

    // DON'T SHOW BUTTON

else
    // SHOW BUTTON

但是如何在基本视图中使用这些数据? (每页都呈现)

更新: 我的用户实体:

    <?php

namespace VolleyScout\VolleyScoutBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;

/**
 * Users
 *
 * @ORM\Table(name="users", indexes=@ORM\Index(name="fk_users_roles1_idx", columns="role_id"))
 * @ORM\Entity
 */
class Users implements AdvancedUserInterface

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=45, nullable=false)
     */
    private $username;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=60, nullable=false)
     */
    private $password;

    /**
     * @var string
     *
     * @ORM\Column(name="salt", type="string", length=30, nullable=false)
     */
    private $salt;

    /**
     * @var string
     *
     * @ORM\Column(name="user_firstname", type="string", length=45, nullable=false)
     */
    private $userFirstname;

    /**
     * @var string
     *
     * @ORM\Column(name="user_surname", type="string", length=255, nullable=false)
     */
    private $userSurname;

    /**
     * @var string
     *
     * @ORM\Column(name="user_email", type="string", length=255, nullable=false)
     */
    private $userEmail;

    /**
     * @var string
     *
     * @ORM\Column(name="user_type", type="string", nullable=false)
     */
    private $userType;

    /**
     * @var string
     *
     * @ORM\Column(name="user_token", type="string", length=45, nullable=true)
     */
    private $userToken;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="user_created", type="datetime", nullable=false)
     */
    private $userCreated;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="user_modified", type="datetime", nullable=true)
     */
    private $userModified;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="user_deleted", type="datetime", nullable=true)
     */
    private $userDeleted;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="user_lastlogin", type="datetime", nullable=true)
     */
    private $userLastlogin;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="user_confirmed", type="datetime", nullable=true)
     */
    private $userConfirmed;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="user_locked", type="datetime", nullable=true)
     */
    private $userLocked;

    /**
     * @var integer
     *
     * @ORM\Column(name="user_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $userId;

    /**
     * @var \VolleyScout\VolleyScoutBundle\Entity\Roles
     *
     * @ORM\ManyToOne(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Roles")
     * @ORM\JoinColumns(
     *   @ORM\JoinColumn(name="role_id", referencedColumnName="role_id")
     * )
     */
    protected $role;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Teams", inversedBy="user")
     * @ORM\JoinTable(name="user_follows_teams",
     *   joinColumns=
     *     @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
     *   ,
     *   inverseJoinColumns=
     *     @ORM\JoinColumn(name="team_id", referencedColumnName="team_id")
     *   
     * )
     */
    private $team;

    /**
     * @var \Doctrine\Common\Collections\Collection
     *
     * @ORM\ManyToMany(targetEntity="VolleyScout\VolleyScoutBundle\Entity\Competitions", inversedBy="user")
     * @ORM\JoinTable(name="user_follows_competitions",
     *   joinColumns=
     *     @ORM\JoinColumn(name="user_id", referencedColumnName="user_id")
     *   ,
     *   inverseJoinColumns=
     *     @ORM\JoinColumn(name="competition_id", referencedColumnName="competition_id")
     *   
     * )
     */
    private $competition;

    private $plainPassword;

    /**
     * Constructor
     */
    public function __construct()
    
        $this->team = new \Doctrine\Common\Collections\ArrayCollection();
        $this->competition = new \Doctrine\Common\Collections\ArrayCollection();
        $this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
    


    /**
     * Set username
     *
     * @param string $username
     * @return Users
     */
    public function setUsername($username)
    
        $this->username = $username;

        return $this;
    

    /**
     * Get username
     *
     * @return string
     */
    public function getUsername()
    
        return $this->username;
    

    /**
     * Set password
     *
     * @param string $password
     * @return Users
     */
    public function setPassword($password)
    
        $this->password = $password;

        return $this;
    

    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    
        return $this->password;
    

    /**
     * Set salt
     *
     * @param string $salt
     * @return Users
     */
    public function setSalt($salt)
    
        $this->salt = $salt;

        return $this;
    

    /**
     * Get salt
     *
     * @return string
     */
    public function getSalt()
    
        return $this->salt;
    

    /**
     * Set userFirstname
     *
     * @param string $userFirstname
     * @return Users
     */
    public function setUserFirstname($userFirstname)
    
        $this->userFirstname = $userFirstname;

        return $this;
    

    /**
     * Get userFirstname
     *
     * @return string
     */
    public function getUserFirstname()
    
        return $this->userFirstname;
    

    /**
     * Set userSurname
     *
     * @param string $userSurname
     * @return Users
     */
    public function setUserSurname($userSurname)
    
        $this->userSurname = $userSurname;

        return $this;
    

    /**
     * Get userSurname
     *
     * @return string
     */
    public function getUserSurname()
    
        return $this->userSurname;
    

    /**
     * Set userEmail
     *
     * @param string $userEmail
     * @return Users
     */
    public function setUserEmail($userEmail)
    
        $this->userEmail = $userEmail;

        return $this;
    

    /**
     * Get userEmail
     *
     * @return string
     */
    public function getUserEmail()
    
        return $this->userEmail;
    

    /**
     * Set userType
     *
     * @param string $userType
     * @return Users
     */
    public function setUserType($userType)
    
        $this->userType = $userType;

        return $this;
    

    /**
     * Get userType
     *
     * @return string
     */
    public function getUserType()
    
        return $this->userType;
    

    /**
     * Set userToken
     *
     * @param string $userToken
     * @return Users
     */
    public function setUserToken($userToken)
    
        $this->userToken = $userToken;

        return $this;
    

    /**
     * Get userToken
     *
     * @return string
     */
    public function getUserToken()
    
        return $this->userToken;
    

    /**
     * Set userCreated
     *
     * @param \DateTime $userCreated
     * @return Users
     */
    public function setUserCreated($userCreated)
    
        $this->userCreated = $userCreated;

        return $this;
    

    /**
     * Get userCreated
     *
     * @return \DateTime
     */
    public function getUserCreated()
    
        return $this->userCreated;
    

    /**
     * Set userModified
     *
     * @param \DateTime $userModified
     * @return Users
     */
    public function setUserModified($userModified)
    
        $this->userModified = $userModified;

        return $this;
    

    /**
     * Get userModified
     *
     * @return \DateTime
     */
    public function getUserModified()
    
        return $this->userModified;
    

    /**
     * Set userDeleted
     *
     * @param \DateTime $userDeleted
     * @return Users
     */
    public function setUserDeleted($userDeleted)
    
        $this->userDeleted = $userDeleted;

        return $this;
    

    /**
     * Get userDeleted
     *
     * @return \DateTime
     */
    public function getUserDeleted()
    
        return $this->userDeleted;
    

    /**
     * Set userLastlogin
     *
     * @param \DateTime $userLastlogin
     * @return Users
     */
    public function setUserLastlogin($userLastlogin)
    
        $this->userLastlogin = $userLastlogin;

        return $this;
    

    /**
     * Get userLastlogin
     *
     * @return \DateTime
     */
    public function getUserLastlogin()
    
        return $this->userLastlogin;
    

    /**
     * Set userConfirmed
     *
     * @param \DateTime $userConfirmed
     * @return Users
     */
    public function setUserConfirmed($userConfirmed)
    
        $this->userConfirmed = $userConfirmed;

        return $this;
    

    /**
     * Get userConfirmed
     *
     * @return \DateTime
     */
    public function getUserConfirmed()
    
        return $this->userConfirmed;
    

    /**
     * Set userLocked
     *
     * @param \DateTime $userLocked
     * @return Users
     */
    public function setUserLocked($userLocked)
    
        $this->userLocked = $userLocked;

        return $this;
    

    /**
     * Get userLocked
     *
     * @return \DateTime
     */
    public function getUserLocked()
    
        return $this->userLocked;
    

    /**
     * Get userId
     *
     * @return integer
     */
    public function getUserId()
    
        return $this->userId;
    

    /**
     * Set role
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Roles $role
     * @return Users
     */
    public function setRoles(\VolleyScout\VolleyScoutBundle\Entity\Roles $role = null)
    
        $this->role = $role;

        return $this;
    

    /**
     * Get role
     *
     * @return \VolleyScout\VolleyScoutBundle\Entity\Roles
     */
    public function getRoles()
    
        return array($this->role->getRoleName());
    

    /**
     * Add team
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team
     * @return Users
     */
    public function addTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team)
    
        $this->team[] = $team;

        return $this;
    

    /**
     * Remove team
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Teams $team
     */
    public function removeTeam(\VolleyScout\VolleyScoutBundle\Entity\Teams $team)
    
        $this->team->removeElement($team);
    

    /**
     * Get team
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getTeam()
    
        return $this->team;
    

    /**
     * Add competition
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Competitions $competition
     * @return Users
     */
    public function addCompetition(\VolleyScout\VolleyScoutBundle\Entity\Competitions $competition)
    
        $this->competition[] = $competition;

        return $this;
    

    /**
     * Remove competition
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Competitions $competition
     */
    public function removeCompetition(\VolleyScout\VolleyScoutBundle\Entity\Competitions $competition)
    
        $this->competition->removeElement($competition);
    

    /**
     * Get competition
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getCompetition()
    
        return $this->competition;
    

    //**********************************
    //  HAD TO IMPLEMENT THESE BY MESELF
    //**********************************//

    private $player;

    /**
     * Get player
     *
     * @return \VolleyScout\VolleyScoutBundle\Entity\Players
     */

    public function getPlayer() 
        return $this->player;
    
    /**
     * Set player
     *
     * @param \VolleyScout\VolleyScoutBundle\Entity\Players $player
     * @return Users
     */
    public function setPlayer(\VolleyScout\VolleyScoutBundle\Entity\Players $player = null)
        $this->player = $player;

        return $this;
    

    public function eraseCredentials()
    
        $this->setPlainPassword(null);
    

    public function getPlainPassword()
    
        return $this->plainPassword;
    

    public function setPlainPassword($plainPassword)
    
        $this->plainPassword = $plainPassword;
    


    /**
     * Implementation of AdvancedUserInterface method
     *
     * @return boolean
     */
    public function isAccountNonExpired()
    
        return true;
    

    /**
     * Implementation of AdvancedUserInterface method
     *
     * @return boolean
     */
    public function isAccountNonLocked()
    
        return true;
    

    /**
     * Implementation of AdvancedUserInterface method
     *
     * @return boolean
     */
    public function isCredentialsNonExpired()
    
        return true;
    

    /**
     * Implementation of AdvancedUserInterface method
     *
     * @return boolean
     */
    public function isEnabled()
    
        // CHECK IF $this->confirmed is not null
        if($this->userConfirmed != null)
            return true;
        
    

【问题讨论】:

【参考方案1】:

当前登录用户存储在twig全局变量app.user

% if app.user.player.team %
    show button
% else %
    not
% endif %

【讨论】:

然后我得到这个错误:Impossible to access an attribute ("myteam") on a NULL variable ("") 但玩家始终为空,当A玩家有user_id时也是如此 那么你们的关系就残废了。 我必须自己将 player 和 getPlayer()、setPlayer() 添加到 Users 实体,因为自动生成的映射没有添加它。 但它仍然给出 NULL.. 我将我的用户实体添加到我的开始帖子中。

以上是关于在基本视图(树枝)+ symfony2 中使用数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - 在树枝中自定义 form_start 函数

Symfony2 树枝模板中图像的路径

自定义 Symfony2 过滤器未使用自定义树枝标签触发

Symfony 2 树枝拆分功能未按预期工作

使用 Symfony 2 本地化树枝中的日期

如何在Symfony2中将json渲染成树枝