2009-07-29 4 views
0

Может кто-нибудь, пожалуйста, скажите мне, какой лучший способ передать значения с контроллера в представление будет? Если кто-то играл с codeignitor, они будут знать, что я имею в виду. Я просмотрел код CI, но не могу найти файл, который обрабатывает это. Я ЛЮБЛЮ, чтобы знать, как это делается.PHP MVC Вопросы

Спасибо!

+2

Это очень специфично для вашего фреймворка (я полагаю, вы сами сворачиваете), возможно, вы захотите дать еще несколько деталей. – deceze

ответ

5

Как я знаю, не обязательно «лучший» способ, но есть общий метод, который я видел много раз, и использовал себя. Он обычно включает ассоциативный массив и либо функцию extract(), либо variable variables.

В основном, все, что вы делаете, это настроить ваши данные в ассоциативный массив, используя ключи, которые станут вашими переменными шаблона.

//inside the controller 
$data['name'] = 'my name'; 
$data['zip'] = '90210'; 

$data массив переходит в руки зрения каким-то образом, прямо или косвенно, и экстрагируют с помощью extract() или с помощью цикла переменных величин (то же самое, на самом деле). Затем шаблон может быть включен, а переменные находятся в локальной области.

//inside the view rendering process 
extract($data); 
//$name and $zip now exist 

Код Igniter следует этой точной процедуре. Внутри system\libraries\Loader.php в последней версии (1.7.1) есть функция с именем view(), которую вы вызываете в контроллере CI для загрузки представления/шаблона (то же самое действительно в CI). Вы передаете массив данных в качестве второго параметра.

view() вызывает внутреннюю функцию, называемую _ci_load(), в том же файле, в котором извлекаются данные, которые вы передавали (и делает некоторые другие пустые файлы кеширования). Ваши переменные готовы к работе после этого в области локальных функций и могут управляться внутри шаблона после последующего include(), так как все, что происходит во включенном файле, также существует в локальной области _ci_load().

Я использовал ту же самую конструкцию в быстром и грязном домашнем MVC, созданном ранее. Это довольно эффективно.

0

В Zend Framework, это так же просто, как

class IndexController { 
public function IndexAction { 
    $this->view->name='Name'; 
} 
} 

с $ this-> view-> хххх заходящего переменную в представлении.