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' => '\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 モデルであり、そのモデルから必要なすべての機能を提供します!

そして最後に、あなたのエラーに行き着きます。これはおそらく、そこにアクションがエコーされないためです。これらの URL をエコーする場所には常に a: を追加します<?php echo Request::$initial->action(); ?>。しかし、ページネーションのコードが表示されません。なので、はっきりとはわかりません。

于 2013-08-06T05:32:36.677 に答える