簡體   English   中英

PHP MVC:在控制器和視圖之間共享模型

[英]PHP MVC: Share model between controller and view

我正在我的PHP(H)MVC項目中工作,在該項目中我將視圖與控制器分離開來-如答案中所示, 如何在MVC中構建模型? 他們的關系是1:1,所以他們有相同的“動作”。 因此,在bootstrap.php中,我實例化它們后調用:

// ... Controller and view are already instantiated.
call_user_func_array(array($controller, $actionName), $actionParameters);
call_user_func_array(array($view, $actionName), $actionParameters);

假設控制器和視圖分別成為模型(域對象)作為構造函數參數。 使用Auryn依賴項注入容器,我嘗試在控制器和視圖之間共享模型的相同實例,而無需事先實例化它。 例如,控制器和視圖實例化發生在bootstrap.php中。

tereško在回答中描述了模型/服務工廠的使用。 但作為“注釋”,他說:

...一個更好的實現方式是使用DI容器(如Auryn)創建僅具有所需服務的控制器和視圖,而不使用工廠。

我的問題是:我可以在沒有模型工廠的情況下使用依賴項注入容器來實現此功能嗎? 我有點被這項任務困住了,我真的不知道這樣做是否可行。 謝謝。

是的你可以。

但這有點奇怪。 您基本上需要將服務設置為“共享”:

<?php
$injector->define('MailerService', [
    ':server' => 'fak.it',
    ':port' => '443',
]);
$injector->share('MailerService');

$controller = $injector->make('FooBarController');

假設您的控制器定義如下:

<?php
class FooBarController 
{
    public function __construct(MailerService $service) 
    {
        // ...
    }
}

在這方面,Symfony的獨立DI組件更易於使用,因為您可以將這種配置放入json或yaml文件中。

PS您可能應該將用戶輸入抽象為某種Request對象螞蟻,並在每次方法調用時將其傳遞到控制器中。

有點像這樣:

<?php
$request = new Request( .. something here maybe .. );
$controller->action($request);

使代碼看起來更好:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM