2012-03-09 14 views
0

私はCakePHPのデフォルトルートを無効にしています。私は最初のルーティングプレフィックスを作成していますPaginatorHelperには、デフォルトルートが無効になっているときのルーティングプレフィックスが含まれています。

Configure::write('Routing.prefixes', array('settings)); 

そして、私はいくつかのルートを追加しました:Html::link方法かなり右に動作して

Router::connect('/users', array('controller' => 'users', 'action' => 'index', 'settings' => true)); 
Router::connect('/users/add', array('controller' => 'users', 'action' => 'add', 'settings' => true)); 
Router::connect('/users/:id', array('controller' => 'users', 'action' => 'view', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/edit', array('controller' => 'users', 'action' => 'edit', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/delete', array('controller' => 'users', 'action' => 'delete', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 

建物リンク:

$this->Html->link('Users', '/users') 

を生成し、
'/users' 

となり、UsersController内のアクションは期待どおりsettings_indexになります。しかし

、このようなPaginatorHelper::sort前に付加/settings、:

'/settings/users/index/sort:username/direction:asc' 

私は組み込みのルートを有効にした場合、実際にのみ動作します。どのように私は'/settings'を付加しないPaginatorHelper作ることができます

  1. :だから私は2つの質問がありますか?
  2. PaginatorHelperという名前のパラメータを自分のカスタムルートで使用できるようにするには、'/users/sort:email/direction:desc'のようなURLを使用できますか?

ありがとう!!

+0

Router :: url()を使用してリンクを生成しようとするとどうなりますか? –

答えて

0

デフォルトルートが無効になっているので、私の問題に対する答えは実際には2つあります。

まず私はPaginationHelperための名前付きパラメータを提供する必要があります。

Router::connectNamed(array(
    'sort' => array('action' => 'index', 'controller' => array('users')), 
    'direction' => array('action' => 'index', 'controller' => array('users')), 
)); 

をそして、私はページネーションを使用して、コントローラとアクションのためのルートを提供する必要があります。

Router::connect('/users/index/*', array(
    'controller' => 'users', 
    'action' => 'index', 
    'settings' => true 
)); 

このルートと言うことが重要です'/users'で始まるルートの最後にある必要があります。それ以外の場合は、アスタリスクが優先されます。したがって、最終的なルートは次のようになります。

Router::connectNamed(array(
    'sort' => array('action' => 'index', 'controller' => array('users')), 
    'direction' => array('action' => 'index', 'controller' => array('users')), 
)); 

Router::connect('/users', array('controller' => 'users', 'action' => 'index', 'settings' => true)); 
Router::connect('/users/add', array('controller' => 'users', 'action' => 'add', 'settings' => true)); 
Router::connect('/users/:id', array('controller' => 'users', 'action' => 'view', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/edit', array('controller' => 'users', 'action' => 'edit', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 
Router::connect('/users/:id/delete', array('controller' => 'users', 'action' => 'delete', 'settings' => true), array('pass' => array('id'), 'id' => '[0-9]+')); 

Router::connect('/users/index/*', array(
    'controller' => 'users', 
    'action' => 'index', 
    'settings' => true 
)); 
1

は、あなたのソート機能の前に、このコマンドを使用してみてください:

$this->Paginator->options(array('url' => array_merge(array('settings' => false), $this->passedArgs))); 

これは、本質的に、それはこれらの機能を実行する前に、使用するページネータヘルパーのためのいくつかのデフォルト値を設定します。 settingsfalseに設定すると、そのルートを設定しないように指示します。

関連する問題