0

引导程序:

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”)。

有人可以帮助我吗?:)

谢谢!

4

1 回答 1

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 的这个正则表达式'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(); ?>。但是我看不到分页的代码。所以我不能确定。

于 2013-08-06T05:32:36.677 回答