CakePHPでError: Class ‘set’ not found 原因と対処方法 即戦力になるための PHPシステム開発の教科書P155より
|
目次
いつものごとく、即戦力になるための PHPシステム開発の教科書を写経しているとまたまたエラーが発生!
エラーの箇所
P153からP156にかけて、顧客登録を行うために、CustomersController.phpにaddメソッドを追加する記述があります。
public function add() { if ($this->request->is('post')) { $this->Customer->create(); if ($this->Customer->save($this->request->data)) { $this->Session->setFlash(__('顧客の登録に成功しました。'), 'Flash/success'); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('顧客の登録に失敗しました。')); } } /** 会社情報を取得する */ $companies = $this->Company->find('all'); /** プルダウン用にデータを整える */ $companies = set::Combine($companies, '{n}.Company.id', '{n}.Company.company_name'); /** 都道府県情報を取得する */ $prefectures = $this->Prefecture->find('all'); /** プルダウン用にデータを整える */ $prefectures = set::Combine($prefectures, '{n}.Prefecture.id', '{n}.Prefecture.pref_name'); /** テンプレートに出力 */ $this->set('company', $companies); $this->set('prefectures', $prefectures); }
しかし、このコードでは事前に作成したindex.ctpの顧客登録ボタンを押しても、Error: Class ‘set’ not foundが表示されます。
エラーの解決方法
エラーの意味するところは、「クラスが見つかりません」ということです。見たまんま。
CakePHP Cookbook 2.x ドキュメントのSetクラスのページ(新しいタブで開く)を参考にしてください。ページのタイトルからして、大体の修正方法は想像はつきますが、
- $companies = set::Combine($companies, ‘{n}.Company.id’, ‘{n}.Company.company_name’);
ではなく、
- $companies = Set::Combine($companies, ‘{n}.Company.id’, ‘{n}.Company.company_name’);
です。
以下に続く、$prefectures…の方も、‘Set’に修正してください。2か所を修正すると、index.ctpからadd.ctpの画面に遷移したときに顧客登録画面が登場します。
〔参考サイト〕