2017-06-04 65 views
0

我正在學習Zend 2,並有一個問題,我似乎無法解決。我確定這是簡單的,但我不能指出它。我想要做的是按state_id列出記錄,並從列表中查看記錄。只顯示其中一個視圖。當我調出/ Blog/view/1時,我收到一條消息:無法找到第0行。這顯示了當前鏈接,如果我將/ 1關閉。所以它甚至沒有看記錄號碼。我懷疑它可能在路由但不確定。感謝 這是我有:Zend 2 module.config約束與模型/控制器不檢索記錄

Module.config 
'router' => array(
    'routes' => array(  
     'blog' => array(  
     'type' => 'Literal', 
     'options' => array(
      'route' => '/Blog', 
      'defaults' => array (
       'module'  => 'Blog', 
       'controller' => 'BlogController', 
       'action'  => 'index', 
      ), // defaults end 
     ), // options end   
     'may_terminate' => true, 
      'child_routes' => array(
       'list' => array(
        'type' => 'segment', 
        'options' => array(
         'route' => '/list[/:state_id]', 
         'defaults' => array (
          'action'  => 'list', 
         ), //defaults end 
         'constraints' => array(
          'state_id'  => '[0-9]+', 
         ) // constraints end 
        ), // options end 
       ), // view end 
       'view' => array(
        'type' => 'segment', 
        'options' => array(
         'route' => '/view[/:post_id]', 
         'defaults' => array(
          'action'  => 'view', 
         ), // defaults end 
         'constraints' => array(
         'post_id'  => '[0-9]+', 
         ) // constraints end 
        ), // options end 
       ), // post end 
      ) // child route end    
     ), // blog end 
    ) // routes end  
) // router end 

); // return array end 

型號:PostTable.php

public function getPosts($post_id) 
{ 
    $post_id = (int) $post_id; 
    $rowset = $this->tableGateway->select(array('post_id' => $post_id)); 
    $row = $rowset->current(); 
    if (!$row) { 
     throw new \Exception("Could not find row $post_id"); 
    } 
    return $row; 
} 

查看:

<h1><?php echo $this->escapeHtml($title); ?></h1> 
<table class="table"> 
<tr> 
    <th>Title</th> 
    <th>View</th> 
    <th>Comments</th> 
    <th>Post Date</th> 
</tr> 
<?php foreach ($list as $posts) : ?> 
<tr> 
    <td><?php echo $this->escapeHtml($posts->post_title);?></td> 
    <td><?php echo $this->escapeHtml($posts->num_views);?></td> 
    <td><?php echo $this->escapeHtml($posts->num_comments);?></td> 
    <td><?php echo $this->escapeHtml($posts->post_date);?></td> 
</tr> 
<?php endforeach; ?> 

編輯:2016年6月6日新增查看操作。

public function viewAction() 
{ 
    return new ViewModel(array(
    'list' => $this->getPostsTable()->getPosts(), 
    )); 
} 

而且這裏是getPostTable行動:

public function getPostsTable() 
{ 
    if (!$this->postsTable) { 
     $sm = $this->getServiceLocator(); 
     $this->postsTable = $sm->get('Blog\Model\PostsTable'); 
    } 
    return $this->postsTable; 
} 
+0

你能告訴我viewAction()嗎? – unclexo

+0

@ J.Sajeeb添加視圖操作。這是從zend 2的專輯教程中獲得的。它顯示了你在模型中的getAlbum,但沒有顯示如何在控制器中檢索它或者實際的視圖。謝謝 –

回答

0

您需要提供職位ID到控制器中的getPosts()方法。以下是根據您的PostTablegetPosts()方法。

public function viewAction() 
{ 

    // Get the post ID from the route, /Blog/view/1 
    $post_id = $this->params()->fromRoute('post_id'); 

    $list = $this->getPostsTable()->getPosts($post_id); 

    $view = new ViewModel(array(
     'list' => $list, 
    )); 

    return $view; 
} 
+0

這工作!你如何使用相同的ID獲取多行?例如,如果我想拉所有記錄與state_id。這不會是行或記錄。上面的作品爲頁面視圖的單個記錄。現在我需要從該狀態拉出所有記錄。謝謝你的幫助。 –

+0

那麼,你需要創建另一個方法或修改'PostTable'的'getPosts()'方法。這個方法通過下面這行代碼返回當前的post/item:$ row = $ rowset-> current();'。例如,可以通過註釋掉這行代碼並總結「if(!$ row)」語句並返回'return $ rowset;'而不是'return $ row;''來取得所有記錄,例如'state_id'! – unclexo

+0

我還發布了另一個問題,我在不同的博客下。你可以在這裏找到它:https://stackoverflow.com/questions/14813668/left-join-in-zf2-using-tablegateway –