2013-04-14 73 views
4

我搜索應用的一組屬性(配置)到一個新創建的實例的最efficent方式。我的第一個目標是保持應用程序面向對象,第二個目標是能夠使用DI容器。這是我來了這麼遠的樣本:實例配置面向PHP

class ViewLogin { 
    public $msgLoginGranted; 
    public $msgLoginFailed; 

    public function __construct(){ 
    } 

    protected function onSuccess() { 
    return $this->msgLoginGranted; 
    } 

    protected function onFailure() { 
    return $this->msgLoginFailed; 
    } 
} 

class ControllerLogin { 
    public function __construct(ModelLogin $model, ViewLogin $view) { 
    } 
} 

爲了保持ViewLogin清潔,獨立的配置數據從代碼是什麼做的最好的事情:

創建ViewLogin1一個新的類

class ViewLogin1 extends ViewLogin { 
    public function __construct() { 
    $this->msgLoginGranted = 'Welcome!'; 
    $this->msgLoginFailed = 'Login Failed!'; 
    } 
} 

缺點:靜態類的內容,沒有新的功能,污染種類空間

傳遞一個配置對象來ViewLogin

class ViewLogin { 
    public function __construct(Config1 $config) { 
    $this->msgLoginGranted = $config->msgLoginGranted; 
    $this->msgLoginFailed = $config->msgLoginFailed; 
    } 
} 

創建ViewLogin一個裝飾?

移動配置XML/JSON/YAML ...

回答

1

我不明白爲什麼你需要ViewLogin1。如果你想在你的框架,並準備在應用程序中使用它的時候我會在框架ViewLoginAbstract和應用ViewLogin去,即使將沒有引入新的功能(還記得你可能需要更換與die('What the hack are you trying to do?')或重定向類似的東西)。

在另一方面,當你在你的應用程序有多個登錄表單,我在路上走像Zend Framework是怎麼回事。

當你看看他們如何使用*Controller class他們使用一個類爲每個控制器和一個通用ViewModel class的意見。

更詳細默認indexAction

public function indexAction() 
{ 
    return new ViewModel(array(
     'content' => 'Placeholder page' 
    )); 
} 

所以我想重用ViewLogin,只是通過配置,因爲沒有新的功能介紹(只是確保你不會想要添加日誌記錄或在未來的其他功能) 。

懸停在我看來,登錄後重定向頁面應該是控制器的責任而不是查看(查看應該只負責顯示html +其他前端的東西),所以我不知道爲什麼你把redirect放到視圖中。

+0

你對重定向的東西是正確的......當我試圖寫這個虛構的例子時,我搞砸了。更改爲消息傳遞。 – user1517081

+0

@ user1517081在這種情況下,您絕對只使用選項。 :) – Vyktor