質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

2508閲覧

CakePHPのプレフィックスルーティング機能について

Aneks

総合スコア114

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2015/01/21 15:01

目的:管理者画面とゲストユーザー画面に分けて表示する
手段:CakePHPのCore.php内にあるプレフィックスルーティング機能を有効にする
問題:プレフィックスルーティングが機能していないorz
参考:リンク内容リンク内容
質問:UserモデルとAdminモデルを使って、管理者画面とゲストユーザー画面を分けて表示しようとしています。参考サイトによると、プレフィックスルーティングを使えば、モデルが動的に切り替わる、と書かれているのですが、切り替わっていないようです。
UsersController::admin_login()内で、$this->login();で最初のloginメソッドを再利用しているのですが、そこでdebug($this->modelClass)をしてみたところ、返ってきたのはUserモデルになっていました。
つまり、切り替わっていない、ということなのではないかと思われます。
ただ、現時点ではあくまでも可能性が高い、というだけのことであり、確信の持てるような情報は他に引き出せていない状況です。
しかし、先ほどと同様の場所で、debug($this->Auth->login());をやってみると、falseが返されます。つまり、Auth->loginが機能していない、ということだと考えています.
ですが、いまいち解決策が見いだせないでいます。

そこで、似たような状況になったことのある方やこうしてみたら良いのではないか、といったアドバイスなどをいただきたく、質問をしました。
よろしくお願いします。

現状のコード

lang

1// admin_index.ctp 2<?php echo $this->Form->create('Admin',array('controller' => 'users','action' => 'admin_index')); ?> 3<?php echo $this->Form->input('username'); ?> 4<?php echo $this->Form->input('password'); ?> 5<?php echo $this->Form->end('登録'); ?> 6 7// admin_login.ctp 8<?php echo $this->Form->create('User'); // UserとAdminで試しましたが、できませんでしたorz ?> 9<?php echo $this->Form->input('username'); ?> 10<?php echo $this->Form->input('password'); ?> 11<?php echo $this->Form->end('ログイン'); ?> 12 13// AppController.php 14class AppController extends Controller { 15 16 public $components = array( 17 'DebugKit.Toolbar', 18 'Session', 19 'Auth' => array('Form' => array('userModel' => 'User')) 20 ); 21 22 public function beforeFilter() { 23 if(isset($this->request->params['admin'])) { 24 $this->Auth->authenticate = array( 25 'Form' => array( 26 'userModel' => 'Admin', 27 'fields' => array('username' => 'username','password' => 'password') 28 ) 29 ); 30 $this->Auth->loginAction = array('controller' => 'users','action' => 'login','admin' => true);// このactionにadmin_をつけてみたこともありますが、ダメでした。 31 $this->Auth->loginRedirect = array('controller' => 'users','action' => 'index','admin' => true); 32 $this->Auth->logoutRedirect = array('controller' => 'users','action' => 'logout','admin' => true); 33 AuthComponent::$sessionKey = "Auth.Admin"; 34 } else { 35 $this->layout = 'default'; 36 AuthComponent::$sessionKey = "Auth.User"; 37 } 38 } 39 40 41} 42 43// UsersController.php 44public function beforeFilter() { 45 parent::beforeFilter(); 46 $this->Auth->allow('index','logout','admin_index'); 47 } 48 49public function index() { 50 if ($this->request->is('post')) { 51 $this->User->create(); // ここのUserをAdminに変えて 52 if ($this->User->save($this->request->data)) { // みましたが、ダメでした。 53 $this->Session->setFlash(__('The user has been saved')); 54 $this->redirect(array('action' => 'index')); 55 } else { 56 $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 57 } 58 } 59 60 } 61 62public function login() { // 通常のログイン処理(ゲストユーザー用)は問題ないのですが、 63 if($this->request->is('post')) { // 管理者用になると、else以下の処理がされますorz 64 if($this->Auth->login()) { // おそらくここで処理が止まっているものと推測されます。 65 $this->redirect($this->Auth->redirectUrl(array('controller' => 'mains','action' => 'admin_index'))); 66 return true; 67 68 } else { 69 $this->Session->setFlash(__('Invalid username or password, try again')); 70 71 return false; 72 } 73 } 74 75 } 76 77public function logout() { 78 $this->redirect($this->Auth->logout()); 79 $this->redirect(array('controller' => 'users','action' => 'index')); 80 } 81 82public function admin_index() { 83 if ($this->request->is('post')) { 84 $this->User->create(); 85 if ($this->User->save($this->request->data)) { 86 $this->Session->setFlash(__('The user has been saved')); 87 $this->redirect(array('action' => 'index')); 88 } else { 89 $this->Session->setFlash(__('The user could not be saved. Please, try again.')); 90 } 91 debug($this->User->create()); 92 debug($this->request->data); 93 } 94 } 95 96public function admin_login() { 97 $this->login(); 98 debug($this->request->data); 99 debug($this->Auth->login()); 100 debug($this->modelClass); 101 debug($this->login()); 102 103 } 104 105public function admin_logout() { 106 $this->logout(); 107 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

うーん、なんか自力解決できたっぽいけど、あんま自信ない。

投稿2015/01/23 11:16

Aneks

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Aneks

2015/01/23 11:39

<追記> どうやら本格的に成功したっぽい。 あとは、それぞれで分かれているかどうかを確認するだけだな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問