URI "/service/add" , "/service/update" がヒットしたとき. Service Class の $service class メンバを更新したい。基本的に、以下の問題「 Issue#101 」を処理する永続オブジェクト: .
基本的に、Router.php から別のコントローラーを呼び出して、同じ $service 配列を更新 (いくつかの配列キー、つまりサービスの追加/更新/削除) したいと考えています。
どうすればこれを達成できますか。$service 配列だけを更新したいので、それらをデータベースに保存したり、他のコントローラーにフェッチしたりしません。
この場合:
- $service 配列だけをデータベースに保存することは決してありません。(コントローラーからモデルを呼び出す)
- 機密情報が含まれている場合、セッションへの保存はデータのリスクにつながる可能性があり、他のシナリオでは $service が大きなオブジェクトである可能性があります。
問題 #101 : 問題は、異なるコントローラー間でサービス クラスからの $service 状態を保持することです。
Router.php
post('/service/add',ControllerService/service_add_function);
post('/service/update',ControllerService/service_update_function);
ControllerService.php
class ControllerService extends BaseController{
service_add_function(){
$service = getPostData();
$instance = Service::getInstance();
$addedService = $instance->addService($service);
//issue#102:
}
service_update_function(){
$service = getPostData();
$instance = Services::getInstance();
// **issue #101**: getService returns null but I want to get $service value
// added from service_add_function() controller
$oldService = $instance->getService()
// modify $oldService values by validating $oldService[key]
$newService = $instance->addService($oldService);
//rendering service template with updated service list
VIEW::render(service.tpl,$newService);
}
}
Services.php
class Services{
static $instance = NULL;
$service = array();
static function getInstance(){
if($instance === NULL)
self::$instance = new Services();
return self::$instance
}
addService($service){
// I will do service[key] validation
$this->service = $service;
}
getService(){
return $this->service;
}
}
オブジェクトが手動で破棄されるのではなく、php スクリプトの実行が終了したときに破棄されるまで、そのようなパターンがライフサイクル全体でオブジェクトの状態を維持する場合、デザイン パターンによる問題解決は高く評価されます。