1. TOPTOP
  2. Webサービス
  3. CakePHP

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が表示されます。

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

〔参考サイト〕