2013年10月30日水曜日

在庫管理システム『SASO1.0』コントローラクラス

コントローラクラスは全て、スーパークラスのControllerBaseクラスを継承します。
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 件のコメント:

コメントを投稿