[CakePHP] 検索IDをURLに埋め込んで検索させる

findAllById を使って、検索して取得するパターンだが、/Store?id=10 ではなくて、/Store/10 のように検索できるようにする。

■Model

find 系を使うので変更なし

■Controller

/Store/10 でアクセスできるようにコントローラを作成…したいのだが、できないので、/Store/index/10 でアクセスする

in Controller/StoreController.php

class StoreController extends AppController {
	public function index($id=null) {
		$group = null;
		if (isset($this->params['url']['id'])) $id = $this->params['url']['id'];
		if (isset($this->params['url']['group'])) $group = $this->params['url']['group'];

		if ( $id != null ) {
			$this->set('Store',$this->Store->findAllById($id));
		} else if ( $group != null ) {
			$this->set('Store',$this->Store->findAllByAreagroupid($group));
		} else {
			$this->set('Store', $this->Store->find('all',array('limit'=>'100')));
		}
	}
}

index メソッドの引き数に $id を追加するだけ。
指定されない場合にも対応できるように、デフォルトの値を null にしておく。

/Store/10 でアクセスしようとすると、「10 という名前のメソッドがない」というエラーが出るので、/Store/index/10 でアクセスをする。この場合、/Store/select/10 のようにメソッド名を変えるほうがベターかと。
今回は、Web API なので、/Store?id=10 形式でアクセスするようにしよう。

■View

戻り値は配列になるので、foreach のところはそのままで。

■結果

指定したIDが表示される。

カテゴリー: CakePHP パーマリンク