0

我正在关注本教程:Zend Framework 1.11 入门

http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework.pdf

,第 12 页,“列出专辑”

  1. D:\program files (x86)\Zend\Apache2\htdocs\zf-tutorial\application\models\DbTable\Albums.php

    <?php
    
    class Application_Model_DbTable_Albums extends Zend_Db_Table_Abstract {
    
        protected $_name = 'albums';
    
        public function getAlbum($id)
        {
            ...
        }
        public function addAlbum($artist, $title)
        {
        ...
        }
    
        public function updateAlbum($id, $artist, $title)
        {
            ...
        }
        public function deleteAlbum($id)
        {
            ...
        }
    
    
    }
    

  1. D:\program files (x86)\Zend\Apache2\htdocs\zf-tutorial\application\controllers\IndexController.php

    <?php
    
    class IndexController extends Zend_Controller_Action  
    {
        public function indexAction() 
        $albums = new Application_Model_DbTable_Albums();
             $this->view->albums = $albums->fetchAll();
        }    
    }
    

  1. D:\program files (x86)\Zend\Apache2\htdocs\zf-tutorial\application\views\scripts\index\index.phtml

     <?php
     $this->title = "My Albums";
     $this->headTitle($this->title);
     ?>
     <p><a href="<?php echo $this->url(array('controller'=>'index',
     'action'=>'add'));?>">Add new album</a></p>
     <table>
     <tr>
     <th>Title</th>
     <th>Artist</th>
     <th>&nbsp;</th>
     </tr>
     <?php foreach($this->albums as $album) : ?>
     <tr>
     <td><?php echo $this->escape($album->title);?></td>
     <td><?php echo $this->escape($album->artist);?></td>
     <td>
     <a href="<?php echo $this->url(array('controller'=>'index',
     'action'=>'edit', 'id'=>$album->id));?>">Edit</a>
     <a href="<?php echo $this->url(array('controller'=>'index',
     'action'=>'delete', 'id'=>$album->id));?>">Delete</a>
     </td>
     </tr>
     <?php endforeach; ?>
     </table>
    

问题:

  1. Albums.php,为什么我们需要这个:protected $_name = 'albums';

  2. 索引控制器.php

    一个。 $albums = new Application_Model_DbTable_Albums();我们没有使用 include/require "Albums.php",我们怎么能使用这个类:Application_Model_DbTable_Albums

    湾。$this->view->albums = $albums->fetchAll();这是什么意思:$this->view->albums?为什么不使用$this->albums

  3. 索引.phtml

    一个。$this->url(array('controller'=>'index','action'=>'add')),我在哪里可以检查这个方法:$this->url()

    湾。为什么我们foreach($this->albums as $album)在这里使用?不像$this->view->albums在 IndexController.php 中那样?

4

1 回答 1

0

Albums.php,为什么我们需要这个:protected $_name = 'albums';?

在 Zend Framework ( Application_Model_DbTable_Albums) 中使用 DbTable 模型时,受保护的成员$_name必须是与模型关联的数据库表的名称。DbTable 模型实际上将成为该表的数据库适配器。

$albums = new Application_Model_DbTable_Albums(); 我们没有使用 include/require "Albums.php",我们怎么能使用这个类:Application_Model_DbTable_Albums?

Zend_Loader自动加载符合预期命名约定并属于预定义资源的类和文件。类Application_Model_DbTable_Albums和文件Application/Model/DbTable/Albums.php都符合命名约定,属于预定义的资源。

$this->view->albums = $albums->fetchAll(); 这是什么意思:$this->view->albums?为什么不使用 $this->albums?

$this->view->albums = $ablums->fetchAll();是将获得的值分配给 Zend_View 对象以在视图脚本中显示的一种$albums->fetchAll()简写方式。这些值可以在视图脚本中回显,echo $this->albums或者更有可能它们可以用 foreach 循环然后显示。

$this->url(array('controller'=>'index','action'=>'add')),我在哪里可以检查这个方法:$this->url()?

这实际上有点难以确定,您会在Zend_View 帮助器参考中找到基本定义,只需向下滚动直到看到它。在Zend_Controller 参考路由器部分可以找到一个更好的例子。本质上,url()帮助程序是在视图脚本中创建链接的首选方法,它不是唯一的方法,有时也不是最好的方法。

为什么我们在这里使用 foreach($this->albums as $album) ?不像 IndexController.php 中的 $this->view->albums?

在控制器中,我们将数据分配给$this->view->data = $data视图脚本(index.phtml)中的视图对象,我们在视图对象中,所以我们只需要访问提供的数据<?php echo $this->data ?>。在数据的情况下$this->albums,可以使用 foreach 循环迭代行集对象(Zend_Db_Row 对象的数组)。大多数有效数据类型都可以使用此方法分配给视图。

这是对这些概念的非常简单的概述,希望对您有所帮助。

于 2013-04-26T09:45:38.810 回答