いつものごとく、即戦力になるための PHPシステム開発の教科書を写経しているとまたまたエラーが発生!
エラーの箇所
P153からP156にかけて、顧客登録を行うために、CustomersController.phpにaddメソッドを追加する記述があります。
[php]
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);
}
[/php]
しかし、このコードでは事前に作成した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の画面に遷移したときに顧客登録画面が登場します。
〔参考サイト〕