我的视图操作没有显示任何数据。 CakePHP的

时间:2011-05-03 07:06:31

标签: cakephp view routes param

这是我在newsses / index.ctp中的链接

$this->Html->link(__("Read more >>", TRUE), array('action'=>'view', $newss['Newsse']['title']));

这是我在newsses_controller.php中的视图代码:

function view($title = NULL){
    $this->set('title_for_layout', __('News & Event', true));

    if (!$id) {
        $this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error')); 
        $this->redirect(array('action'=>'index'));
    }
    $this->set('newsse', $this->Newsse->read(NULL,$title));
    $this->set('newsses', $this->Newsse->find('all'));
}

但它没有显示任何东西, 我想做路线: “newsses / view / 2”to“newsses / view / title_of_news”

请帮帮我....

2 个答案:

答案 0 :(得分:0)

为此,您需要在模型中创建一个新方法,该方法将按新闻标题显示结果。此时你使用$ this-> Newsse->读取(NULL,$ title))。您在读取方法中使用$ title,而此读取方法搜索模型中的新闻ID。所以你只需要在模型类中创建一个新方法,比如readByTitle($ title){在这里写查询以按标题获取新闻}。并在您的控制器中使用此方法。 $这 - > Newsse-> readByTitle(NULL,$标题))

答案 1 :(得分:0)

您正在使用Model::read()方法方法,该方法将您要访问的模型表中行的id作为第二个参数。在这种情况下最好使用find。您无需在模型或控制器中构建新方法,只需编辑当前的view方法。

# in newsses_controller.php:
 function view($title = null) {
     $this->set('title_for_layout', __('News & Event', true));

     if (!$id) {
        $this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error')); 
        $this->redirect(array('action'=>'index'));
    }

    $this->set('newsse', $this->Newsse->find('first', array(
        'conditions' => array('Newsse.title' => $title)
    ));
    $this->set('newsses', $this->Newsse->find('all'));
}

或者,你可以制作一个更混合的形式,当给出数字标题时,仍然可以通过id查看(这假设你从未有过只有数字字符标题的新闻项目,例如'12345')。

# in newsses_controller.php:
 function view($title = null) {
     $this->set('title_for_layout', __('News & Event', true));

     if (!$id) {
        $this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error')); 
        $this->redirect(array('action'=>'index'));
    } else if (is_numeric($title)) {
        $this->set('newsse', $this->Newsse->read(NULL, $title));
    } else {
        $this->set('newsse', $this->Newsse->find('first', array(
            'conditions' => array('Newsse.title' => $title)
        ));
    }

    $this->set('newsses', $this->Newsse->find('all'));
}

最后,您还可以使用(较短的)自定义find方法替换示例中的findBy方法(有关详细信息,请参阅documentation)。

$this->Newsse->findByTitle($title);