2012-02-13 7 views
0

私はログインしたユーザのためにビューを設定しようとしています。私はcakephp 2.0マニュアルのコードを解除しました。コントローラコード:Cakephpがurlを修正するためにルーティングされず、url paramを空にします。

public function view($id = null) { 

    $this->User->id = $id; 
    if (!$this->User->exists()) { 
     throw new NotFoundException(__('Invalid user')); 
    } 

    $this->set('user', $this->User->read(null, $id)); 
} 

user_idが1のユーザがログインすると、cakeは/ users/1に移動しません。代わりに/ users/viewに移動します。

Router::connect('/users', array('controller' => 'users', 'action' => 'login')); 
Router::connect('/users/:action', array('controller' => 'users')); 
Router::connect('/users/:id', array('controller' => 'users', 'action' => 'view')); 

私は間違っているか、ルートコードまたはコントローラコードが不明です。

UPDATE新しいコントローラ機能:成功したログインがいずれかのページが認証されていないユーザーが最初に開こうとしたか、アクションがであなたのAuthコンポーネントのloginRedirectプロパティに設定された後

public function view($id = null) { 

    $this->User->id = $id; 
    if (!$this->User->exists()) : 
     throw new NotFoundException(__('Invalid user')); 

    elseif($this->Auth->login()) : 
return $this->redirect(array('controller' => 'users', 'action' => 'view', AuthComponent::user('id'))); 

    endif; 
    $this->set('user', $this->User->read(null, $id)); 
} 

答えて

1

ページケーキが開きます(App)コントローラ。また、documented hereとして。言い換えれば、上記のコードはあなたが記述している/要求している動作とは何の関係もありません。

この場合、成功したログイン後にuser_idが利用できるだけなので(loginRedirectでは設定できません)、代わりにUsersControllerでログインアクションを調整する必要があります。 :

if ($this->Auth->login()) { 
    return $this->redirect(array('controller' => 'users', 'action' => 'view', AuthComponent::user('id')); 
} 
+0

私はあなたが言っていることを見るので、例外をスローするコードを取り出して代わりに使用しました。それは/ users/view/18としてログインしていて、クロムは私にリダイレクトループエラーを与えました。私はリダイレクトコマンドをコントローラのアクションに戻すべきでしょうか? OPに新しい機能を追加します。 – huzzah

+0

いいえ、あなたは私の答えを誤解しました。コードの一部は、あなたのビューアクションではなく、あなたのログインアクションに入れなければなりません。 – Oldskool

+0

申し訳ありません。これで、ループエラーなしで正常にログインできますが、まだ/ users/view/18にルーティングされています。私はケーキに/ users/18に行く方法を理解していません。私はあなたの助けを本当にありがとう。私が実際に何かを書いているときのように、あなたは私にcakephpのマニュアルだけが私には不明瞭ないくつかのah-haを提供しました。 – huzzah

関連する問題