CakePHPでError: Class ‘set’ not found 原因と対処方法 即戦力になるための PHPシステム開発の教科書P155より

いつものごとく、即戦力になるための 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が表示されます。

1

エラーの解決方法

エラーの意味するところは、「クラスが見つかりません」ということです。見たまんま。

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の画面に遷移したときに顧客登録画面が登場します。

2

〔参考サイト〕

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次