SOY App開発の説明 管理画面でデータを削除する
前回まででデータの登録と更新を見てきました。
今回は管理画面でのデータの削除を見ていきたいと思います。
データベースを利用するために下記をダウンロードしてください。
データを削除するために、
各データに削除ボタンを設置します。
設置は以前、IndexPage.class.phpに作成したSampleListに追加します。
SOY App開発の説明 管理画面側に一覧ページを作成する。
class SampleList extends HTMLList{ protected function populateItem($entity){ $this->createAdd("name", "HTMLLabel", array( "text" => $entity->getName() )); $this->createAdd("description", "HTMLLabel", array( "html" => nl2br($entity->getDescription()) )); $link = SOY2PageController::createLink(APPLICATION_ID . ".Page.Detail." . $entity->getId()); $this->createAdd("detail_link", "HTMLLink", array( "link" => $link )); $removeLink = SOY2PageController::createLink(APPLICATION_ID . ".Page.Remove." . $entity->getId()); $this->createAdd("remove_link", "HTMLActionLink", array( "link" => $removeLink, "onclick" => "return confirm('削除してもよろしいですか?');" )); } }
フォーム作成の際に同じページからのPOSTであるか?を確認するために、
$this->createAdd("form", "HTMLForm");で常にトークンを発行するようにしましたが、
一つ前のページからリンクを確実に踏んできたか?を確認するために
リンクの場合はHTMLActionLinkを使用して、
URLの末尾にトークンをつけるようにします。
http://ドメイン/main/app/index.php/mock/Page/Remove/3?soy2_token={トークン}
次に削除を行うページの作成ですが、
PHPファイルのみ用意します。
今回の削除用のページは下記のファイルに用意します。
/CMSインストールディレクトリ/app/webapp/mock/pages/Page/RemovePage.class.php
RemovePage.class.php
<?php class RemovePage extends WebPage{ function RemovePage($args){ $id = (isset($args[0])) ? $args[0] : null; /** * HTMLを持たずに処理だけのページの場合はWebPage::WebPage();を書かない */ $dao = SOY2DAOFactory::create("Sample.SOYMock_SampleDAO"); try{ $dao->deleteById($id); }catch(Exception $e){ // } CMSApplication::jump("Page?success"); } } ?>
今までのページと異なる点は、
処理のみのページでHTMLファイルを持たないので、
WebPage::WebPage();の記述が必要ありません。
POSTではないので、
処理はRemovePage関数内で行います。
初めにHTMLActionLinkで遷移しているので、
soy2_check_tokenで前ページで付与したトークンを確認します。
あとは、
$dao = SOY2DAOFactory::create("Sample.SOYMock_SampleDAO"); $dao->deleteById($id);
DAOクラスを呼び出して削除を行えば終了です。