前回の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についての記述はありません。
次回は編集の部分を説明します。