为什么没有将消息添加到flashMessanger?

时间:2014-06-01 17:25:34

标签: php redirect zend-framework2

我创建了分页,并希望添加检查用户是否要访问页面,这不是现有的。例如,有10页,用户想要打开999页。我想添加错误消息,这将显示没有999页面。

我试过了(这很有用):

public function listAction() {
    $page = // getting page

    $pagginator = // setting paginator

    // this part will add message to the flashMessanger
    if($page > $paginator->count()) {
        $message = 'There are no such page';
        $this->flashMessenger()->addMessage($message);
        return $this->redirect()->toRoute('zfcadmin/news');
    }

    return new ViewModel(array(
        'news' => $paginator,
    ));
}

这是有效的代码。这是list操作的代码。当我在浏览器中键入以下内容时执行此操作:example.com/admin/news。如果我要输入example.com/admin/news/page-500,我们会将浏览器重定向到example.com/admin/news,并会显示消息There are no such page

我想在我的网站的其他部分添加相同内容,但我在同一个控制器的index操作中遇到了问题。这是index操作:

public function indexAction() {
    return new ViewModel(array(
        'news' => $this->getItems(),
        'categoryName' => null,
    ));
}

如您所见,我调用函数getItems()。此功能的代码:

private function getItems($categoryId = null) {
    $page = // getting page

    $paginator = // getting paginator

    if($page > $paginator->count()) {
        $message = 'There are no such page';
        $this->flashMessenger()->addMessage($message);
        if($categoryId) {
            return $this->redirect()->toRoute('news/category', array('category' => $categoryId));
        } else {
            return $this->redirect()->toRoute('news');
        }
    }

    return $paginator;
}

我试过这个,我收到了这个错误:

  

致命错误:调用未定义的方法   Zend \ Http \ PhpEnvironment \ Response :: count()in   F:\服务器\域\ ZF2骨架\模块\新闻\图\新闻\新闻\ index.phtml   在第32行

我意识到,这是因为我将$this->redirect作为getItems()函数的结果返回,并将其分配给查看变量news

我试过这个:

if($page > $paginator->count()) {
    $message = 'There are no such page';
    $this->flashMessenger()->addMessage($message);
    if($categoryId) {
        $this->redirect()->toRoute('news/category', array('category' => $categoryId));
    } else {
        $this->redirect()->toRoute('news');
    }
}

我没有收到任何错误,但我没有收到消息,该页面也很糟糕。

我想......我敢打赌,这里没有人不想知道我的想法:)

请帮我解决这个问题。

如何在我的情况下正确地将重定向+写入消息发送到flashMessanger(以便我可以稍后输出)?

更新

我理解,可以从函数get项返回数组并处理它。其中一个元素将显示zf2是否重定向,另一个将显示类别ID,第三个将包含paginator本身,但它是脏解决方案(但可能:()。

0 个答案:

没有答案