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

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

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

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

Q&A

解決済

1回答

8911閲覧

Call to a member function allow() on null

TomoKubota

総合スコア53

CakePHP

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

0グッド

0クリップ

投稿2017/03/27 02:08

cakePHP 2.9を使用しています。
authコンポーネントを使用したいのですが、
表題のCall to a member function allow() on nullエラーが出てしまい、
どう対処したらいいかわからず、困り果てています。
どなたか、解決策をご存知の方らがいらっしゃいましたら、
教えていただけますでしょうか。

コントローラーとモデルはそれぞれ以下の通りです。

PHP

1<?php 2App::uses('AppController', 'Controller'); 3/* 4 * ユーザー認証機能のコントローラー 5 */ 6class UsersController extends AppController { 7 8 public function beforeFilter() { 9 parent::beforeFilter(); 10 // ログインアクションとログアウトアクションは認証しない 11 $this->Auth->allow('login'); 12 $this->Auth->allow('logout'); 13 $this->Auth->allow('add'); 14 } 15 16 public function index() { 17 $this->User->recursive = 0; 18 $this->set('users', $this->paginate()); 19 } 20 21 public function view($id = null) { 22 $this->User->id = $id; 23 if (!$this->User->exists()) { 24 throw new NotFoundException(__('Invalid user')); 25 } 26 $this->set('user', $this->User->findById($id)); 27 } 28 29 /* 30 * ログイン済みの場合は、indexに移動 31 */ 32 public function login() { 33// echo "<pre>"; 34// var_dump($_SESSION); 35// echo "</pre>"; 36// exit; 37 if (isset($_SESSION["Auth"]["User"]["username"])) { 38 $this->Flash->success(__('You have already been logged in!')); 39 return $this->redirect(array( 40 'controller' => 'Top', 41 'action' => 'index')); 42 } 43 if ($this->request->is('post')) { 44 if ($this->Auth->login()) { 45 $this->redirect($this->Auth->redirect()); 46 } else { 47 $this->Flash->error(__('Invalid username or password, try again')); 48 } 49 } 50 } 51 52 /* 53 * ログアウトページへ移動するだけで、 54 * ログアウト処理が実行される 55 */ 56 public function logout() { 57 $this->redirect($this->Auth->logout()); 58 } 59 60 public function add() { 61 if ($this->request->is('post')) { 62 $this->User->create(); 63 if ($this->User->save($this->request->data)) { 64 $this->Flash->success(__('The user has been saved')); 65 return $this->redirect(array('action' => 'index')); 66 } 67 $this->Flash->error( 68 __('The user could not be saved. Please, try again.') 69 ); 70 } 71 } 72}

PHP

1// app/Model/User.php 2 3App::uses('AppModel', 'Model'); 4App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); 5 6class User extends AppModel { 7 public $validate = array( 8 'username' => array( 9 'required' => array( 10 'rule' => 'notBlank', 11 'message' => 'A username is required' 12 ) 13 ), 14 'password' => array( 15 'required' => array( 16 'rule' => 'notBlank', 17 'message' => 'A password is required' 18 ) 19 ), 20 'role' => array( 21 'valid' => array( 22 'rule' => array('inList', array('admin', 'author')), 23 'message' => 'Please enter a valid role', 24 'allowEmpty' => false 25 ) 26 ) 27 ); 28 29 public function beforeSave($options = array()) { 30 if (isset($this->data[$this->alias]['password'])) { 31 $passwordHasher = new BlowfishPasswordHasher(); 32 $this->data[$this->alias]['password'] = $passwordHasher->hash( 33 $this->data[$this->alias]['password'] 34 ); 35 } 36 return true; 37 } 38}

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

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

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

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

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

guest

回答1

0

ベストアンサー

$this->Auth->allow() を呼び出そうとしたが、前提条件の $this->Authが NULL です。
NULL オブジェクトのメンバ関数 allows なんてものはないので、「Call to a member function allow() on null」なわけです(null から、メンバ関数 allow() を呼び出そうとした)

AppController の $components に、Auth は定義してありますか?

投稿2017/03/27 02:18

tacsheaven

総合スコア13703

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

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

TomoKubota

2017/03/27 02:25

ご指摘の通りと申しますか、 AppControllerのファイルがアップされておりませんでした・・・。 的確なご指摘をいただけなければ、このまま気づけずにいました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問