Quantcast
Channel: コノルブログ »フレームワーク
Viewing all articles
Browse latest Browse all 7

Lithiumで作ってみたその3

$
0
0

前回のLithiumで作ってみたその2の続きです。

まず初めに結果はこれです。

http://sample.conol.jp/lithium/app_sample/sample1/posts

今回は投稿の削除用に/sample1/delを作ります。
Sample1のコントローラーに削除用のdelを追加します。

/sample1/del/{:削除するデータのid}

というURLでアクセスされることを想定しています。

namespace app\controllers;

use app\models\Sample1;

class Sample1Controller extends \lithium\action\Controller {

	// 省略

	public function del() {

		// idをチェックして、idの値がtrueならデータベースから検索してくる

		if(!$this->request->id || !($col = Sample1::find($this->request->id)))
			// idの値がfalse、もしくはデータベース上にそのidを持つデータが存在しないなら/sample1にリダイレクト
			$this->redirect(array('controller' => 'sample1'));

		// deleteします。

		$col->delete();

		// 前回作成したsuccessにリダイレクト

		$this->redirect(array('action' => 'success'));
	}

}

まず、 $this->request->id からidを取得していますが、この形式で取得するためには app/config/routes.php に以下のように追記する必要があります。

// 省略

// ----- ここに追加
Router::connect('/sample1/{:action}/{:id:[0-9a-f]{24}}', array('controller' => 'sample1', 'id' => null));
// ----- ここまで追加

/**
 * Finally, connect the default routes.
 */

Router::connect('/{:controller}/{:action}/{:id:[0-9]+}.{:type}', array('id' => null));
Router::connect('/{:controller}/{:action}/{:id:[0-9]+}');
Router::connect('/{:controller}/{:action}/{:args}');

これを追記することによって/sample1/{:アクション名}/{:id} という形式でアクセスされた場合にsample1コントローラの各アクションで $this->request->id という形式で {:id} の部分の値を取得できるようになります。{:id:正規表現} で値をフィルタリングできます。’id’ => null としているのは {:id} の部分のデフォルトの値です。

MongoDBの”_id”の値は文字列ではなくObjectIdです。
参考:http://wiki.mongodb.org/pages/viewpage.action?pageId=7831684
Lithiumでは”_id”の値がModelに文字列(24桁の十六進数)で入力された場合にObjectIdに変換して扱います。

という理由からidの正規表現は/[0-9a-f]{24}/となっています。

今回の/sample1/delではviewを使用しないのでviewについての記述はありません。

次回は編集の部分を説明します。


Viewing all articles
Browse latest Browse all 7

Trending Articles