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 件のコメント:
コメントを投稿