2014-01-12 31 views
0

我正嘗試使用cakephp創建分頁,但它給了我找不到錯誤地址。 未在此服務器上找到請求的地址'/ mygroup/newsfeed/page:2'。在cakephp分頁中找不到請求的地址錯誤

我收到以下錯誤在我的日誌文件

Error: [MissingActionException] Action GroupsController::page:2() 
could not be found. 
Exception Attributes: array (
'controller' => 'GroupsController', 
'action' => 'page:2', 
) 

請在下面找到我的代碼:

查看:

<?php if($this->params['paging']['NewsFeed']['pageCount'] > 1): ?> 
<?php $this->paginator->options(array('url' => array('controller' => 'groups', 
'action' => 'newsfeed', 'sluggroup' => $groupdata['Group']['group_slug'])));?> 
<div class="paginationbiz"> 
    <ul> 
     <li class="prevnext disablelink"><?php echo $this->paginator->prev('« Prev',array()); ?></li> 
     <li><?php echo $this->paginator->numbers(); ?></li> 
     <li class="prevnext"><?php echo $this->paginator->next('Next »',array()); ?></li> 
    </ul> 
</div> 
<?php endif; ?> 

routes.php文件

Router::connect('/:sluggroup/:action/*', array('controller' => 'groups', 
'action' => 'newsfeed'),array('pass' => array('sluggroup'))); 

控制器:

$this->paginate = array(
      'conditions' => array('NewsFeed.group_id'=>$groupdata['Group']['id'],'NewsFeed.status'=>'A'), 
      'joins' => array(
        array(
          'alias' => 'newslikes', 
          'table' => 'news_feed_likes', 
          'type' => 'LEFT', 
          'conditions' => array('newslikes.news_feed_id = NewsFeed.id','newslikes.user_id'=>$this->Auth->user('id'),'newslikes.status'=>'1') 
        ), 


      ), 
      'fields' => array('IFNULL(newslikes.user_id,0) AS likestatus','NewsFeed.id','NewsFeed.group_id','NewsFeed.posted_message','NewsFeed.event_id','NewsFeed.event_desc','NewsFeed.event_slug','NewsFeed.event_title','NewsFeed.doc_id','NewsFeed.doc_title','NewsFeed.doc_file','NewsFeed.doc_path','NewsFeed.alert_id','NewsFeed.alert_title','NewsFeed.alert_desc','NewsFeed.created','NewsFeed.user_id','NewsFeed.status','NewsFeed.newslike' 
        ,'IFNULL(newslikes.status,0) AS status'), 
      'order' => array(
        'NewsFeed.updated' => 'desc' 
      ),'limit' =>10, 'page'=>1, 
    ); 

    $this->set('newsfeed', $this->paginate($this->NewsFeed)); 

回答

0

你有一個similar question(沒有答案了),因爲同樣的問題。

你的問題是,路線

Router::connect('/:sluggroup/:action/*', array('controller' => 'groups', 
       'action' => 'newsfeed'),array('pass' => array('sluggroup'))); 

也就是說,我的朋友,是殺了你。對於像這樣的每個url domain.url/your-controller/your-action,您很好,因爲該網址與您的路線不匹配。 但是,對於像domain.url/your-controller/your-action /某個參數的網址,您會得到一個匹配。

domain.url/your-controller/your-action != /:sluggroup/:action/* //ok case 
domain.url/sluggroup/action/*   == /:sluggroup/:action/* //ok case 

//NOT THE MATCH THE MATCH YOU WANT 
domain.url/your-controller/your-action/params == /:sluggroup/:action/* 

我看到的唯一選擇是改變那條路線,否則這種情況會持續發生在你身上,不需要的匹配。現在,有兩種選擇......好吧,可能更多。如果得到sluggroup參數的URL對應於一個單一的控制器,讓我們把它稱爲「GroupsController」,你可以這樣做

Router::connect('/groups/:sluggroup/:action/*', array('controller' => 'groups', 
       'action' => 'newsfeed'),array('pass' => array('sluggroup'))); 

,並且會匹配domain.com/groups/slug/action/網址etc,但是,它仍然會給你提供相同控制器的其他操作的問題(如domain.com/groups/edit/2)。你可能避免增加更多的網址,在那一個爲每一個動作的頂部,像

Router::connect('/groups/edit/*', array('controller' => 'groups', 
       'action' => 'edit'))); 
Router::connect('/groups/edit', array('controller' => 'groups', 
       'action' => 'edit'))); 
Router::connect('/groups/:sluggroup/:action/*', array('controller' => 'groups', 
       'action' => 'newsfeed'),array('pass' => array('sluggroup'))); 

另一種選擇是使路線跳過與正則表達式參數規則

Router::connect('/:sluggroup/:action/*', array('controller' => 'groups', 
       'action' => 'newsfeed'), 
       array('pass' => array('sluggroup'), 
       array('sluggroup' => '[^(groups)]'))); 

我不擅長與正則表達式,但想法是,你只適用於該路線的網址sluggroup匹配該正則表達式,否則跳過它,它會到達正確的路線。

這兩個都不是很可持續,你有沒有好像有你的網址domain.com/groups/newwsfeed/slug/other-params並保持簡單?

+0

感謝您的回答 – user1851420

+0

我已經通過使用此路由解決了此問題Router :: connect('/:sluggroup/newsfeed/*',array('controller'=>'groups','action'=>'newsfeed' ),array('pass'=> array('sluggroup'))); – user1851420

相關問題