2013-08-05 27 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