2012-09-11 85 views
0

我有一個問題,我一直在做我自己的MVC應用程序,但似乎有一個在模型和控制器之間傳遞變量的問題。控制器的輸出是包含一些json格式數據的單個變量,看起來很簡單。從控制器傳遞變量到視圖

控制器

<?php 

class controllerLib 
{ 
    function __construct() 
    { 
      $this->view = new view(); 
    } 

    public function getModel($model) 
    { 
      $modelName = $model."Model"; 
      $this->model=new $modelName(); 
    } 
} 

class controller extends controllerLib 
{ 
    function __construct() 
    { 
      parent::__construct(); 
    } 

    public function addresses($arg = false) 
    { 
      echo'Addresses '.$arg.'<br />'; 

      $this->view->render('addressesView'); 

      $this->view->showAddresses = $this->model->getAddresses(); 
    } 
} 

?> 

查看

<?php 

class view 
{ 
    function __construct() 
    { 
    } 

    public function render($plik) 
    { 
     $render = new $plik(); 
    } 
} 

class addressesView extends view 
{ 
    public $showAddresses; 

    function __construct() 
    { 
     parent::__construct(); 

     require 'view/head.php'; 

     $result = $this->showAddresses; 


     require 'view/foot.php'; 
    } 
} 


?> 

現在的問題是,這 - $> showAddresses沒有通過查看和IM卡。

+2

很多基本的東西出了問題,我建議你閱讀有關OOP和MVC模型。我會盡力在稍後更正此代碼 –

回答

0

的代碼有各種問題:

  1. 渲染()保存新的視圖在一個局部變量,這樣做的功能結束

  2. 你不能指望$this->showAddresses後不存在在構造函數時有一個值。

您應該將render()方法作爲View構造函數以外的方法實現。

function __construct() 
{ 
    parent::__construct(); 

    require 'view/head.php'; 

    $result = $this->showAddresses; // (NULL) The object is not created yet 


    require 'view/foot.php'; 
} 

視圖類:

public function factory($plik) // Old render($splik) method 
{ 
    return new $plik(); 
} 

addressesView類:

function __construct() 
{ 
    parent::__construct(); 
} 

function render() 
{ 
    require 'view/head.php'; 

    $result = $this->showAddresses; // Object is created and the field has a value 


    require 'view/foot.php'; 
} 

控制器類:

$view = $this->view->factory('addressesView'); 
$view->showAddresses = $this->model->getAddresses(); 
$view->render(); 
+0

我建議您閱讀有關工廠模式設計。答案中的代碼旨在減少更改次數,但您的View類應該是獨立類,並且您的AddressesView應該實現至少一個接口 – Maks3w

+0

完成以及獨立視圖和干涉:) –

相關問題