ControllerBaseクラスの役割は主に、レガシーPHPであるlogicディレクトリの中身、及びビューの呼び出しです。
そして、エラーページを呼び出す役割もあります。
ビューはviewディレクトリ内のtemp.phpというテンプレートファイルから呼び出されます。
各ページのタイトルなどはtemp.phpに記述されます。
<?php namespace saso\classes\controllers; use \saso\classes\base; class ControllerBase{ private $_title; private $_content; private $_errorMessage; private function _linkTo($path){ return 'http://' . $_SERVER['HTTP_HOST'] . '/' . PROGRAM_DIR . '/' . $path; } private function _getContentTitle() { return $this->_title; } private function _getContent() { return $this->_content; } protected function _setContentTitle($title) { $this->_title = $title; } protected function _setCurrentContent($current) { require_once 'logic/' . $this->_controllerName . '/' . $current.'.php'; $this->_content = 'view/' . $this->_controllerName . '/' . $current.'.php'; require_once 'view/temp.php'; } protected function _invalidAccess(){ $postTest = new base\Post(); $nameTest = new base\Request($postTest); if(is_null($nameTest->getRequest())){ header('Location: http://'.$_SERVER['HTTP_HOST'] . '/' . PROGRAM_DIR . '/' . $this->_controllerName . '/start/',TRUE,'303'); } } public function error($errorCode){ switch($errorCode){ case 'database': $this->_errorMessage = 'データベースに接続できませんでした。'; break; case 'invalid': $this->_errorMessage = '入力値が不正です。'; break; case 'notFound': $this->_errorMessage = 'ページが見つかりません。'; break; case 'invalidClone': $this->_errorMessage = 'クローンは使えません。'; break; default: $this->_errorMessage = '予期せぬエラーが発生しました。'; break; } $this->_title = 'エラー'; $this->_content = 'view/error.php'; require_once 'view/temp.php'; } }
少々長いControllerBaseクラスに対し、それぞれのコントローラクラスは非常に単純です。
やっていることは、タイトルの設定と、呼び出すlogicとviewディレクトリ以下のファイル名のセットです。
「$this->_invalidAccess();」を設定することでPOSTなしでアクセスするのを防ぎます。
(startAction()に飛ばされます)
<?php namespace saso\classes\controllers; class ItemController extends ControllerBase{ protected $_controllerName = 'item'; public function startAction(){ $this->_setContentTitle('商品管理'); $this->_setCurrentContent('start'); } //商品登録 public function addItemAction(){ $this->_setContentTitle('商品登録'); $this->_setCurrentContent('addItem'); } public function addItemConfirmAction(){ $this->_invalidAccess(); $this->_setContentTitle('登録確認'); $this->_setCurrentContent('addItemConfirm'); } public function addItemSaveAction(){ $this->_invalidAccess(); $this->_setContentTitle('登録完了'); $this->_setCurrentContent('addItemSave'); } }
0 件のコメント:
コメントを投稿