我正在使用zend framework 1.10和doctrine 2.我想知道在我的(doctrine)模型类中,引用由我的应用程序设置的变量(bootstrap.php,存储在Zend_Registry
中的变量)是个好主意,我认为它类似于全局变量)
我想要访问的是doctrine entityManager。我也想要登录用户的id
答案 0 :(得分:1)
我正在构建一个类似设置的项目(ZF 1.10 + Doctrine2),我使用依赖注入来处理这种情况,就像 takehin 所说的那样。这里是完整的项目存储库URL:https://bitbucket.org/phpfour/zf-doctrine2。以下是一些代码摘录。
这是我的控制器:
<?php
require_once APPLICATION_PATH . "/models/PostManager.php";
class IndexController extends Zend_Controller_Action
{
private $_em;
public function init()
{
$this->_em = $this->getInvokeArg('bootstrap')->getResource('doctrine');
}
public function indexAction()
{
$pm = new PostManager($this->_em);
$this->view->posts = $pm->getPublicPosts();
}
我的实体经理(或服务类):
<?php
class PostManager
{
protected $_em;
public function __construct(Doctrine\ORM\EntityManager $em)
{
$this->_em = $em;
}
public function getPublicPosts()
{
$query = $this->_em->createQuery('SELECT p FROM Entities\Post p WHERE p.visible = true');
$posts = $query->getResult();
return $posts;
}
希望这有帮助!
答案 1 :(得分:0)
你应该简单地将Zend_Auth用于登录用户ID问题,然后在模型中执行类似以下的操作
class Model extends BaseModel
{
public function something()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$loggedInUserId = $auth->getIdentity()->id;
}
}
}
答案 2 :(得分:0)
这种方法没有错(除非你指的是单身人士)。尽可能使用依赖注入。
但是我会为此创建一个服务(或两个)。
class Modulename_Services_Servicename
{
public function getCurrentUser() { ... }
public function getCurrentUserModel() { ... }
public function isLogged() { ... }
public function authenticate() { ... }
public function getSomeData()
{
$user = $this->getCurrentUser()
$model = new YourModel($user);
$query = ....;
$result = $query->execute();
return $result;
}
public function getSomeMoreData($usermodel) { ... }
}