2012-04-11 86 views
0

我認爲我剛剛工作太久而且很累。我有一個使用Zend Framework的應用程序,其中顯示數據庫中的俱樂部列表。然後,我希望用戶能夠點擊該俱樂部並獲得俱樂部的身份標識,並將其發佈到另一個頁面以顯示更多信息。在PHP中傳遞變量Zend Framework

這裏的俱樂部控制器:

class ClubsController extends Zend_Controller_Action 
{ 

    public function init() 
    { 

    } 

    public function indexAction() 
    { 
     $this->view->assign('title', 'Clubs'); 
     $this->view->headTitle($this->view->title, 'PREPEND'); 
     $clubs = new Application_Model_DbTable_Clubs(); 
     $this->view->clubs = $clubs->fetchAll(); 
    } 
} 

模型:

class Application_Model_DbTable_Clubs extends Zend_Db_Table_Abstract 
{ 

    protected $_name = 'clubs'; 

    public function getClub($id) { 
     $id = (int) $id; 
     $row = $this->fetchRow('id = ' . $id); 
     if (!$row) { 
      throw new Exception("Count not find row $id"); 
     } 
     return $row->toArray(); 
    } 
} 

的觀點:

<table> 
    <?php foreach($this->clubs as $clubs) : ?> 
    <tr> 
     <td><a href=''><?php echo $this->escape($clubs->club_name);?></a></td> 
     <td><?php echo $this->escape($clubs->rating);?></td> 
    </tr> 
    <?php endforeach; ?> 
</table> 

我想我剛開如何它使用Zend做困惑框架..

回答

1

一個例子:

class ClubsController extends Zend_Controller_Action 
{ 

    public function init() 
    { 

    } 

    public function indexAction() 
    { 
     $this->view->assign('title', 'Clubs'); 
     $this->view->headTitle($this->view->title, 'PREPEND'); 
     $clubs = new Application_Model_DbTable_Clubs(); 
     $this->view->clubs = $clubs->fetchAll(); 
    } 

    public function displayAction() 
    { 
     //get id param from index.phtml (view) 
     $id = $this->getRequest()->getParam('id'); 
     //get model and query by $id 
     $clubs = new Application_Model_DbTable_Clubs(); 
     $club = $clubs->getClub($id); 
     //assign data from model to view [EDIT](display.phtml) 
     $this->view->club = $club; 
     //[EDIT]for debugging and to check what is being returned, will output formatted text to display.phtml 
     Zend_debug::dump($club, 'Club Data'); 

    } 
} 

[編輯] display.phtml

<!-- This is where the variable passed in your action shows up, $this->view->club = $club in your action equates directly to $this->club in your display.phtml --> 
<?php echo $this->club->dataColumn ?> 

認爲index.phtml

<table> 
    <?php foreach($this->clubs as $clubs) : ?> 
    <tr> 
    <!-- need to pass a full url /controller/action/param/, escape() removed for clarity --> 
    <!-- this method of passing a url is easy to understand --> 
     <td><a href='/index/display/id/<?php echo $clubs->id; ?>'><?php echo $clubs->club_name;?></a></td> 
     <td><?php echo $clubs->rating;?></td> 
    </tr> 
<?php endforeach; ?> 

的示例視圖使用url()輔助

<table> 
     <?php foreach($this->clubs as $clubs) : ?> 
     <tr> 
     <!-- need to pass a full url /controller/action/param/, escape() removed for clarity --> 
     <!-- The url helper is more correct and less likely to break as the application changes --> 
      <td><a href='<?php echo $this->url(array(
       'controller' => 'index', 
       'action' => 'display', 
       'id' => $clubs->id 
      )); ?>'><?php echo $clubs->club_name;?></a></td> 
      <td><?php echo $clubs->rating;?></td> 
     </tr> 
    <?php endforeach; ?> 
</table> 

[編輯] 隨着你的模型當前的getClub()方法建立您可能需要使用$club['data']訪問數據的方式。這可以通過從返回的值中刪除->toArray()來糾正。
如果您還沒有這樣做,您可以通過將以下行添加到.htaccess文件SetEnv APPLICATION_ENV development來激活屏幕上的錯誤消息。 使用你提供的信息,確保display.phtml住在application\views\scripts\club-description\display.phtml(我很確定這是正確的,ZF處理一些有趣的方式駱駝案件名稱)

+0

好吧,所以我有俱樂部頁面與俱樂部列出,然後單擊時,我在俱樂部說明控制器頁上的地址欄中獲得id。但是,當我嘗試從數據庫獲取任何信息時,它不起作用......我不知道我在做什麼錯誤。這裏是clubDescriptionController:http://pastebin.com/1CPXhbZj 如果我嘗試: <?php echo $ clubs-> club_name;?> 它不顯示任何內容。 – Rik89 2012-04-12 14:02:25

+0

這使我更加困惑..在我的應用程序中的ClubsController是顯示俱樂部與鏈接,將他們帶到ClubDescriptionController這是控制器,我已經通過變量獲取該特定俱樂部的信息..然後我有這在控制器的索引操作 - > http://pastebin.com/ERErZnUb,然後在視圖中 - > echo $ this-> escape($ this-> clubs-> club_name);很抱歉,我剛剛開始使用ZF,並且正處於讓我的腦袋圍繞MVC架構的最後階段,如果您能更清楚地說明它會很棒! Thnx – Rik89 2012-04-13 14:13:52

+0

此外,我添加SetEnv APPLICATION_ENV開發到我的.htaccess文件,我仍然從我的控制器得到相同的錯誤..我有我的application.ini文件中設置顯示錯誤。 – Rik89 2012-04-13 15:04:39

0

你可以把俱樂部ID到您鏈接到可以在視圖中的href網址 - 比如/controllername/club/12,然後獲取這些信息與控制:

$clubId = (int) $this->_getParam('club', false); 

的「假」,將是一個默認值,如果沒有給出參數。 (int)是確保獲得數字的好習慣(如果是其他非數字字符串,則爲0)。

在你看來
+0

好吧,我有我的俱樂部視圖:http:// pastebin.com/LBa6YJwm 然後我有控制器:http://pastebin.com/k9PWqu2N 但我變量沒有被通過.. – Rik89 2012-04-11 13:57:15

+0

我必須像這樣鏈接http://pastebin.com/bqJQUhpE甚至去俱樂部DescritpionController,但以這種方式,我不明白我將如何通過變量? – Rik89 2012-04-11 14:16:28

+0

使用@listsnik回答中顯示的Url助手。 – Config 2012-04-11 16:16:23

2

做到這一點

<?php foreach ($this->clubs as $clubs) : ?> 
... 
<a href="<?php echo $this->url(array(
        'controller' => 'club-description', 
        'action' => 'index', 
        'club_id' => $clubs->id 
        ));?>"> 
... 

這樣,你必須在你的ClubDescription控制器的index動作可用club_id PARAM。你得到像這樣$this->getRequest()->getParam('club_id')

+0

太棒了!我有url中的俱樂部ID,但是$ this-> getRequest() - > getParam('club_id')到底做了什麼?因爲我把它放在ClubDescriptionController的indexAction中,我什麼也得不到。我是否必須創建一個功能來通過ID獲取俱樂部信息?這看起來像什麼? – Rik89 2012-04-11 18:04:55

+1

'getParam('club_id')'獲取GET-var'club_id'的值。使用這個ID,你可以使用'Zend_Db_Table'對象的'find()'方法獲取俱樂部信息:'$ clubs = new Application_Model_DbTable_Clubs();'然後'$ row = $ clubs-> find($ club_id) ' – Config 2012-04-11 21:49:30

+0

好吧,讓我明白網址助手的做事方式,它的工作原理。但是,我無法理解的是如何從ClubsDescritpionController中的id中獲取數據。我有這個:http://pastebin.com/V41uxEmv,然後如果我嘗試在視圖中回顯club_name控制器它不會做任何事情。 – Rik89 2012-04-12 14:32:10