Zend Framework 2 - 从其他模块获取内容

时间:2013-12-28 17:04:04

标签: php zend-framework2 methodology

我的项目如下:

- root<br>
 - module
     - Application
         - view 
             - application
                 - index
                     - index.phtml
      - ZfcUser
         - view
             - zfc-user
                   - user
                      - login.phtml

(对不起,如果不可读的话,我的第一篇文章就是我尽我所能)

当我(从我的网络浏览器)http://site.local/user访问并且我已通过身份验证 ZfcUser显示login.phtml

现在我想显示一些来自我的模块应用程序的信息,但我不想在login.phtml或甚至任何ZfcUser控制器上编写特定代码,因为我认为这不是一个好习惯。< / p>

好的做法(我猜)应该是在应用程序上准备一个控制器,我给调用者一些内容。

我可以直接从login.phtml获取吗?

抱歉我的英文。如果您无法理解我的问题,请随时回复并要求进一步澄清,这不是我的主要语言。

我正在寻找最好的方法来真正了解它是如何完成的。

感谢您关注我的问题。

2 个答案:

答案 0 :(得分:0)

感谢语法修正。

由于我得到了一些负面反馈(-3)我在这里发布我的解决方案也许如果有人遇到同样的问题会有帮助......

我已经在login.phtml上添加了类似的内容:

  <?php 
    use Application\Controller\News

    $news = new News();<br>
    $newsContent = $news->getNewsTable();

  ?>

然后我可以在我的视图中使用此函数的结果。 它有效,我不认为这是一个很好的做法,应该避免,但至少它是有效的....:|

答案 1 :(得分:0)

这是我的解决方案(前一个是错误的,但我将其用于非正式/合乎逻辑的目的,我得到的答案)

登录后我没有进入ZfcUser,而是将请求路由到ZfcDataGrid。 要做到这一点,只需在ZfcUser / Controller /上编辑UserController.php 并将indexAction修改为:

if (!$this->zfcUserAuthentication()->hasIdentity()) {
        return $this->redirect()->toRoute('zfcuser/login');
    }
return $this->redirect()->toRoute('ZfcDatagrid');

在这里我们检查一下我们是否经过身份验证,如果我们要去ZfcDataGrid,如果不是,我们会转到默认的zfcuser登录。

在我的数据文件中我使用了这个:(在ZfcDataGrid数据文件中提供用于呈现网格的内容)

    $sm = $this->getServiceLocator();                
    $this->newsTable = $sm->get('Application\Model\News');
    $news = $this->newsTable->fetchAllToArray();

    foreach ($news as $index=>$value) {
        $data[$index] = $value;            
    }                

    return $data;

然后在我的.phtml

<div name="zfcuser" style="position:relative; top:10px; left:80%;">
<div style="float:left; padding-right:16px;">
<?php echo $this->gravatar($this->zfcUserIdentity()->getEmail()) ?></div>
<h3><?php echo $this->zfcUserDisplayName() ?>!</h3>
<a href="<?php echo $this->url('zfcuser/logout') ?>">[Sign Out]</a>
<div style="clear:both;"></div>
</div>
<a class="btn btn-primary" href="<?php echo $this->url('ZfcDatagrid') ?>"
<?php echo    $this->translate('cancelback') ?>
role="button"    class="btn" data-toggle="modal">Cancel and back to previous page</a>
<?php
echo '
<h2>Title : ' . $new[0]['title'] . '</h2>'; ?>
<form method="post" action="somepage">
<textarea name="content" style="width:100%">

<?php echo '<p>' . $new[0]['content'] . '</p>
'?></textarea>
</form><a class="btn btn-primary" href="<?php echo 
                        $this->url("news")."save";?>">
<?php echo $this->translate('Validate'); ?>
</a>

所以答案我发现在其他模块控制器上使用你需要的模型(使用Application \ Model \ NewsModel;) 然后在控制器上获取模型中的数据并将结果传递给视图。 然后在您的视图中显示数据。

如果有人能告诉我这是否是正确的方式来做我想做的事情,或者如果需要更多解释可以随意提问。

再次感谢你帮助卡洛斯,我真的很感激。

新年快乐:D