2012-04-11 2 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> 

Я думаю, что я просто сбит с толку от того, как его сделали с Зенд каркас ..

ответ

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'); 

    } 
} 

[EDIT] 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> 

[EDIT] С тем, что ваш метод тока GetClub() в вашей модели построена вам, возможно, потребуется доступ к данным с помощью $club['data']. Это можно исправить, удалив ->toArray() из возвращаемого значения.
Если вы не сделали этого, вы можете активировать сообщения об ошибках на экране, добавив следующую строку в ваш .htaccess файл SetEnv APPLICATION_ENV development. Используя информацию, которую Вы поставили, убедитесь, что display.phtml жизни в application\views\scripts\club-description\display.phtml (я уверен, что это правильно, ZF обрабатывает некоторые имена ГорбатыйРегистра в смешно)

+0

Итак, у меня есть страница клубов с перечисленными клубами, а затем, когда вы нажимаете, я получаю идентификатор на странице описания описания клуба в адресной строке. Однако, когда я пытаюсь получить любую информацию из db, она не работает ... Я не знаю, что я делаю неправильно. Здесь находится clubDescriptionController: http://pastebin.com/1CPXhbZj Если я пытаюсь: club_name;?> Он ничего не показывает. – Rik89

+0

Это еще больше смутило меня. The ClubsController в моем приложении - отображать клубы со ссылкой, чтобы отправить их в ClubDescriptionController, это Контроллер, где я прошел переменную, чтобы получить информацию для этого конкретного клуба. Тогда у меня есть это в действии индекса для этого контроллера -> http://pastebin.com/ERErZnUb, а затем это в представлении -> echo $ this-> escape ($ this-> clubs-> club_name); Извините за боль, которую я только начал использовать ZF, и я на конечных этапах получаю голову над архитектурой MVC, если бы вы могли сделать это яснее, это было бы здорово! Thnx – Rik89

+0

Также я добавил SetEnv APPLICATION_ENV в мой файл .htaccess, и все равно получаю те же ошибки от своего контроллера. У меня есть ошибки отображения, установленные в моем файле application.ini. – Rik89

0

Вы можете поместить клуб ID в URL, который вы ссылаетесь на как HREF в представлении - такие, как /controllername/club/12 и затем извлечь эту информацию в контроллер с:

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

«ложь» будет значение по умолчанию , если не было заданного параметра. (Int) является хорошей практикой, чтобы удостовериться, что вы получили номер назад (или 0, если это была какая-то другая нечисловая строка).

+0

Ok поэтому у меня есть мои клубы осмотреть: // pastebin.com/LBa6YJwm Я тогда контроллер: http://pastebin.com/k9PWqu2N Но переменная не передается .. – Rik89

+0

я должен связать как это http://pastebin.com/bqJQUhpE даже попасть в clubDescritpionController, но таким образом я не понимаю, как передать переменную? – Rik89

+0

Используйте хелпер Url, как показано в ответе @ namesnik. – Config

2

на ваш взгляд, сделать это

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

Таким образом, вы будете иметь параметров club_id в указателе действия контроллера ClubDescription. Вы получите его, как этот $this->getRequest()->getParam('club_id')

+0

Отлично! У меня есть идентификатор клубов в URL-адресе, но что именно делает это this this-getRequest() -> getParam ('club_id')? как я положил его в indexAction из ClubDescriptionController, и ничего не получаю. Должен ли я создавать функцию, чтобы получить информацию о клубах через идентификатор? Как это будет выглядеть? – Rik89

+1

'getParam ('club_id')' выбирает значение GET-var 'club_id'. Используя этот идентификатор, вы можете получить информацию о клубе с помощью метода 'find()' объекта 'Zend_Db_Table':' $ clubs = new Application_Model_DbTable_Clubs(); ', а затем' $ row = $ clubs-> find ($ club_id) ' – Config

+0

Хорошо, поэтому я понимаю, что помощник URL-адреса делает что-то, и он работает. Но у меня возникает проблема с пониманием того, как получить данные из id в ClubsDescritpionController. У меня есть это: http://pastebin.com/V41uxEmv, а затем, если я попытаюсь повторить имя_блока в представлении для контроллера, он ничего не делает .. – Rik89

Смежные вопросы