На данный момент все, что делает наш сайт — это выводит фразу Hello, world ! (ну или другую фразу, если вы что-то поправляли в action-методе), причем выводит сразу из Контроллера минуя Вид. Но так никто и никогда не делает. Приложение строится на их взаимодействии, причем из Контроллера в Вид можно передавать какие-то данные. Давайте «научим» наш пока единственный Контроллер welcome работать с файлом Вида, который мы сейчас создадим.
Для этого откройте файл контроллера /application/classes/controller/welcome.php и измените его метод следующим образом:
public function action_index() { $this->response->body(View::factory('welcome')); }
В Кохане файлы Видов находятся в папке /application/views/, где можно также организовывать подпапки для удобства. Еще файлы видов могут лежать в папке /modules/название модуля/views/, в том случае, если вид используется в модуле. Поскольку ни о каких модулях пока речи не идет, то создаем файл welcome.php и сохраняем его по следующему пути: /application/views/welcome.php. Внутрь можно засунуть какой-нибудь текст и какие-нибудь html-теги. Ну давайте напишем
<h2>Привет! Это Вид. Как меня ВидНо ?</h2>
А теперь запустите наш проект. Все вывелось ? Отлично.
Как мы видим, у класса View есть статический метод factory. Он на самом деле принимает два параметра. Первый — это название файла Вида. Второй — это массив со значениями, которые будут использоваться в Виде. Метод factory вернет нам новый объект класса View. Который в процессе дальнейшей обработки выведет html-код в браузер, в чем мы только что убедились.
Передача данных в Вид. Массив с данными.
Как говорилось ранее, одной из главных особенностей Контроллеров является возможность передавать данные в файлы Вида. Это позволяет нам держать логику в Контроллерах и Моделях, а представление в Видах. Есть несколько вариантов реализации этого. Два мы рассмотрим сейчас, остальные в следующем уроке.
Измените метод action_index в Контроллере следующим образом:
public function action_index() { $data = array( 'name' => 'Васька', 'age' => 25 ); $this->response->body(View::factory('welcome', $data)); }
а в Виде поменяйте текст на такой:
<h2>Привет!</h2> Меня зовут, <?php echo $name; ?>. Мне <?php echo $age; ?> лет.
В виде я всегда использую echo для вывода, но вы можете использовать сокращенную форму записи ‘=’.
Запустите. Должно вывестись крупным шрифтом Привет! и ниже Меня зовут, Васька. Мне 25 лет.. После передачи массива в качестве второго параметра произошла его обработка таким образом, что в Виде его ключи стали названиями переменных. Все очень просто, но не всегда удобно. К счастью этот способ — не единственный.
Создание переменных экземпляра класса View.
Рассмотрим еще один способ. Измените код следующим образом:
public function action_index() { $view = View::factory('welcome'); $view->name = 'Васька'; $view->age = 25; $this->response->body($view); }
Сохраните, запустите. Не поменялось совершенно ничего, вывод такой же. Но в этот раз мы уже не создаем массив с парами ключ — значение, а используем метод factory, чтобы работать с экземпляром Вида и создаем новые значения (для этого в классе View используется магический метод __set).
На этом пока все. Оставшиеся способы мы рассмотрим в следующем уроке.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
что за магический __set?
В ООП используются. Методы __set() и __get(). Их ще называют аксессорами.
Приветствую, Денис.
Поправьте, если ошибаюсь: эти методы в простонародье называют «гетторы», «сетторы». В свое время, тоже было интересно, что это за magic method
Ну как не назови, лишь бы работали
Вы очень даже правы
Не так давно начал изучение — пытаюсь разобраться и перенести проект. Хотел бы посоветоваться — насколько правильно я выбрал платформу для реализации
Из остальных фреймворков я работал только с Code Igniter, так что о том, что лучше — не могу сказать
Хотя, сколько раз ловил себя на мысли может оставить как есть: методом буфферизации вкалдываю в основной шаблон динамический контент и так же передаю в массиве данные для вида — стоит ли….
Проблема у меня с ЧПУ….индексация не проходит. Хотя это больше приложение, а не информационный ресурс taxi-free.ru
ErrorException [ 8 ]: Array to string conversion ~ SYSPATH\classes\Kohana\Log\Writer.php [ 81 ]
выскакивает вот такое при выполнении такого кода
class Controller_Welcome extends Controller {
public function action_index()
{
$this->response->body(View::factory(‘Цelсome’));
}
}
Цelсome?
(‘Цelсome’) ?
ты что наркоман?
У меня выводит строчку о виде всю вопросами? что это может быть? неправильная кодировка или я где ошибся?
С кодировкой что-то.