SOY CMS / SOY Shop

ブログトップ

SOY App開発の説明 管理画面でデータを削除する

2014年02月10日

前回まででデータの登録と更新を見てきました。

今回は管理画面でのデータの削除を見ていきたいと思います。

SOY App開発の説明 詳細ページでデータを更新する




データベースを利用するために下記をダウンロードしてください。

soymock_0.0.5.zip



データを削除するために、

各データに削除ボタンを設置します。


設置は以前、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クラスを呼び出して削除を行えば終了です。