Работаем с Видом — Часть 1

Комментарии: 34  Просмотры: 49 899

На данный момент все, что делает наш сайт — это выводит фразу 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).

На этом пока все. Оставшиеся способы мы рассмотрим в следующем уроке.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 34 коммент.

че то выводит квадратики

С кодировкой что-то видимо.

@brulEx
Юзайте в Виде нормальную html страничку:
[code]

...
[/code]
и будет Вам счастье! :)

Вот блин! Здешний парсер «сожрал» html код! :(

Короче, подключите в страничку код:
meta http-equiv=»Content-Type» content=»text/html; charset=utf8″
(В угловых скобках естессно! :) )

Парсер здешний нужно «убить»!.. :(
Заменяет нормальные кавычки (двойные) на хз что! :(

ничего, скоро (надеюсь) форум будет. точнее он уже есть, надо донастроить

Предусматривает ли данный фреймворк возможность сохранять шаблоны вида в других расширениях? например в tpl?

наверное нет. по крайней мере я такой возможности не знаю.

есть возможность прикрутить к кохана смарти (smaty.net), я так и сделал — правда есть свои минусы с подсведкой синтаксиса, зато вестальщикам лучше с таким зверьком работать ;)

Чтоу! Интересно..

в хтмл

в бутстрапе:
setlocale(LC_ALL, ‘Russian_Russia.1251′);
все равно вместо букв квадратики (((

Вообще все в утф8 должно быть. Забудьте Windows-1251 как срашный сон.

Есть удобный редактор UTF8 под винду? (Всегда писал сайты на 1251 из-за удобства работы в FARе.)

application/bootstrap.php


date_default_timezone_set('Europe/Moscow');

setlocale(LC_ALL, 'ru_RU.utf-8');

I18n::lang('ru-ru');

Kohana::init(array(
'base_url' => '/',
'charset' => 'utf-8',
'index_file' => FALSE

Хотя I18n::lang тут к делу не относится

Только не забывай при редактировании\создании файлов, проверять, чтоб они сохранялись именно в utf-8

Я тут подумал, Вы сказали, что использовать массив для передачи значений в вид не всегда удобно, не могли бы вы пример привести почему? По моему вы не правы, хотя на вкус и цвет, как известно, товарищей нет.

Например, если нужно передать только одно значение )

Привет! Меня зовут, . Мне лет.
когда мы пишем так, почему мы не обращаемся к массиву, а сразу выводим его элементы?
например я бы хотел так:
data->name; но выводит ошибку…странно выглядит.

После передачи массива в качестве второго параметра происходит его обработка таким образом, что в Виде его ключи стали названиями переменных.



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.