2013-08-05 57 views
0

Bootstap:的Kohana 3.3 - 分頁缺少行動parametr

Route::set('user', 'user/<username>(/<action>)') 
->defaults(array(
    'controller' => 'user', 
    'username' => '\d+', 
)); 

控制器用戶:

public function action_cget(){ 
     $page_num = @$_GET['page']? $_GET['page'] : 1; 
     $per_page = 5; 
     $offset = ($page_num - 1) * $per_page; 
     $username = $this->request->param('username'); 

     $session = Session::instance(); 
     $mUser = Model::factory('User'); 
     $id = $mUser->getID($username); 
     $view = View::factory('index'); 

     $total = DB::query(Database::SELECT, 'SELECT * FROM `comments` WHERE `post_id` IN('.$ids.')')->execute()->as_array(); 

     $q = DB::query(Database::SELECT, 'SELECT * FROM `comments` WHERE `post_id` IN('.$ids.') LIMIT '.$per_page.' OFFSET '.$offset)->execute()->as_array(); 
     $pagination = Pagination::factory(array(
      'total_items' => count($total), 
      'current_page' => array('source' => 'query_string', 'key' => 'page'), 
      'items_per_page' => $per_page, 
      'view' => 'pagination/basic')); 



     $view->content = View::factory('user/cget'); 
     $view->content->comments = $q; 
     $view->content->pagi = $pagination; 
     $this->response->body($view); 

(我刪除的更多的代碼)

一切正常,但分頁呈現壞 - 渲染沒有行動。

我的頁面http://mysite.com/user/NetJaro/cget

和分頁上呈現像http://mysite.com/user/NetJaro?page=2鏈接(沒有動作,像「cget」)。

有人可以幫助我嗎? :)

謝謝!

回答

0

我將從一些常規修復開始。

首先Kohana是HMVC框架。這意味着任何Request都可以調用任意數量的「子請求」。你的代碼不是HMVC - 友好。假設您希望以正確的方式將此操作稱爲子請求。

echo Request::Factory('user/NetJaro/cget') 
     ->query(array('some' => 'some-query-parameters', ...)) 
     ->execute(); 

這不行!即使你把查詢參數放在請求中!這是因爲這條線,它採用超全局,這是從來沒有在一個子請求設​​置:

$page_num = @$_GET['page']? $_GET['page'] : 1; 

它應該是以下,這不正是同樣的事情,是子請求友好。

$page_num = Arr::get($this->request->query(), 'page', 1); 

接下來我看了一下你的路線。並注意到這個正則表達式的用戶名爲'username' => '\d+',。你只允許數字?不應該是[a-zA-Z0-9]要允許用戶名可能包含的所有常規字符?

然後,我們得出以下行:

$mUser = Model::factory('User'); 
$id = $mUser->getID($username); 

如果我是正確的,你創建一個用戶對象,然後獲取ID seperately。爲什麼你不使用:

$user = ORM::factory('User', array('username' => $username)); 
$user_id = $user->id; 

要查詢您的數據庫的用戶與該用戶名。

接下來我們來介紹一些內容。

$total = DB::query(Database::SELECT, 'SELECT * FROM `comments` WHERE `post_id` IN('.$ids.')')->execute()->as_array(); 

$ids從哪裏來?爲什麼你不使用ORM?

$total = ORM::factory('Comment')->where('post_id', 'IN', $ids)->count_all(); 

對於下一個查詢是同樣的事情。

$q = ORM::factory('Comment') 
    ->where('post_id', 'IN', $ids) 
    ->limit($per_page) 
    ->offset($offset) 
    ->find_all(); 

現在你不必擔心SQL注入或其他什麼了。您創建的模型是ORM模型,可以爲您提供該模型所需的所有功能!

最後,我們來找你的錯誤。這可能是因爲沒有行動在那裏迴應。無論你迴應那些網址,都可以添加:<?php echo Request::$initial->action(); ?>。但我看不到分頁的代碼。所以我無法確定。

+0

嗨! 非常感謝您的建議。 我使用<?php echo Request :: $ initial-> action(); ?>它顯示了我的行動。 在/ users/NetJaro/cwrite它顯示我「cwrite」,所以沒關係。 我使用來自Kohana 3.3的分頁https://github.com/shadowhand/pagination – Marcin

+0

所以你修好了嗎? – AmazingDreams

+0

編號 當我使用分頁,並在網站上呈現它http://site.com/user/NetJaro/cwrite分頁呈現鏈接而不採取行動(http://site.com/user/NetJaro/?page= 2)。 但<?php echo Request :: $ initial-> action(); ?>顯示動作相關。 – Marcin