Реализация эффективной ассоциации Controller / View, такой как ZendFramework - PullRequest
1 голос
/ 28 мая 2010

Я делаю свою собственную структуру PHP-MVC. У меня есть вопрос относительно Ассоциации Контроллера и Представления. Мне нравится, как Zend Framework использует представление в Controller следующим образом:

$this->view->data = 'Data here';

, поэтому его можно использовать следующим образом:

echo $this->data;

Мне интересно, как я могу реализовать эту ассоциацию. Я хочу удалить коды между /** **/ и хочу заменить их на некоторые магические функции. Мои коды для контроллера, как указано ниже:

 class UserController extends Controller{
  /************************************/
  public function __construct(){
   $this->view = new View();
   $this->view->setLayout( 'home' );
  }
  function __destruct(){
   $this->view->render();
  }
  /************************************/
  public function index(){
   $this->redirect('user/login');
  }
  public function login(){   
  }
  public function register(){
  }
  public function forgotPassword(){
  }
 }

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Вам не нужны магические функции для реализации этого. Вы можете просто сделать:

$this->view->var1 = 'val1';

Создайте метод в вашем контроллере с именем set или assign, который принимает имя и значение и сохраняет его в массиве. Прежде чем вызывать view, пройдитесь по этому массиву и назначьте объекту view:

foreach ($this->viewVars as $viewVar) {
    $this->view->$viewVar['name'] = $viewVar['val'];
}
0 голосов
/ 28 мая 2010

Используйте магический метод __set () и __get ().

защищенный $ _data = array ();

public function __set($name, $value)
{
   $this->_data[$name] = $value;
}

public function __get($name)
{
   return $this->_data[$name];
}

Затем реализуйте обработку ошибок при получении значений, которые не установлены и т. Д. *

...