2013年10月31日木曜日

2013年10月31日業務報告

本日の業務日報と進捗表は以下の通りです。予定より前出しで進捗しております。
なお、本日「ルバシカ・黒」をヤフオク!に出品いたしましたことを報告いたします。



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');
    }
}


2013年11月前半の予定

標題の予定は以下のガントチャートの通りです。
袴及び袴その2の製品作成に入ります。
それと同時に、新商品の開発も行ないます。
立体裁断は一日仕事となりますので、製品製造はその日はいたしません。
 以上、今後とも日本標準機構をよろしくお願いいたします。

2013年10月30日業務報告

本日の業務日報と進捗表は以下の通りです。予定通り進捗しております。

2013年10月29日火曜日

2013年10月29日業務報告

本日の業務日報と進捗表は以下の通りです。
袴その2のサンプルが完成いたしました。OKでしたので近々本生産に入ります。


2013年10月28日月曜日

2013年10月28日業務報告

本日の業務日報と進捗表は以下の通りです。予定より前倒しで進捗しております。


2013年10月25日金曜日

在庫管理システム『SASO1.0』POSTとGETの受け取り

POSTとGETの受け取りもクラスにします。
手順としては、まずPOSTはPostクラス、GETはUrlParameterクラスが受け取ります。
(リクエスト振り分けクラスDispatcherがGETはスラッシュ区切りの第3パラメータ以降としていたのでした。)

次に、RequestクラスがPostインスタンス、UrlParameterインスタンスを引数に取り、
そののちgetRequest()メソッドで使えるようにします。

ここで、Requestクラスは2種類のインスタンスを引数に取りますが、
その2種類にはsetValues()メソッドを持って欲しいのです。
そこで、RequestInterfaceを定義します。

<?php
namespace saso\classes\base;

interface RequestInterface{
    function setValues();
}
それを実装したものが以下の二つです。

<?php
namespace saso\classes\base;

class Post implements RequestInterface{
    private $_values;
    
    public function setValues(){
        foreach($_POST as $key => $value){
            $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
            $this->_values[$key] = $value;
        }
        return $this->_values;
    }
}

<?php
namespace saso\classes\base;

class UrlParameter implements RequestInterface{
    private $_values;
    
    public function setValues(){
        foreach($_GET as $key => $value){
            $this->_values[$key] = $value;
        }
        
        return $this->_values;
    }
}
Requestクラスはコンストラクタでインターフェースをタイプヒンティングしています。
<?php
namespace saso\classes\base;

class Request{
    private $_request;
    
    public function __construct(RequestInterface $r){
        $this->_request = $r->setValues();
    }
    private function _hasKey($key){
        if(false == array_key_exists($key,$this->_request)){
            return false;
        }
        return true;
    }
    public function getRequest($key = null){
        if(null == $key){
            return $this->_request;
        }//キーを指定されなかったら、全部を配列で返す。
        if(false == $this->_hasKey($key)){
            return null;
        }//言われたキーがない場合nullを返す
        return $this->_request[$key];//普通は言われたキーのヴァリューを返す
    }
}
使い方は以下の通りです。
<?php
$post = new base\Post();
$name = new base\Request($post);
echo $name->getRequest('itemName');

参考:http://www.objective-php.net/