Bootstap:
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 :(得分: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。你为什么不用:
$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(); ?>
。但是我看不到分页的代码。所以我无法确定。