На данный момент все, что делает наш сайт — это выводит фразу 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).
На этом пока все. Оставшиеся способы мы рассмотрим в следующем уроке.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
че то выводит квадратики
С кодировкой что-то видимо.
@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
Я тут подумал, Вы сказали, что использовать массив для передачи значений в вид не всегда удобно, не могли бы вы пример привести почему? По моему вы не правы, хотя на вкус и цвет, как известно, товарищей нет.
Например, если нужно передать только одно значение )
:facepalm:
Привет! Меня зовут, . Мне лет.
когда мы пишем так, почему мы не обращаемся к массиву, а сразу выводим его элементы?
например я бы хотел так:
data->name; но выводит ошибку…странно выглядит.
После передачи массива в качестве второго параметра происходит его обработка таким образом, что в Виде его ключи стали названиями переменных.