{{TOC}} {{DOCVER 4.0=0da300f6445bec5a70d007f503834fce957b065b 16.10.2014 5:19:26, 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03, 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15}} == Базовые отклики == **Возврат строк из ((docs/v4/routing маршрутов))** %% Route::get('/', function () { return 'Привет, мир!'; }); %% **Создание собственного ответа (отклика)** Объект %%Response%% наследует класс %%Symfony\Component\HttpFoundation\Response%%, который предоставляет набор методов для построения отклика HTTP. %% $response = Response::make($contents, $statusCode); $response->header('Content-Type', $value); return $response; %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) Если вам нужен доступ к методам класса %%Response%%, но вы хотите возвращать шаблон в качестве содержимого отклика, то вы можете использовать метод %%Response::view%% для удобства: ~%% return Response::view('hello')->header('Content-Type', $type); ~%% %% **Добавление cookie к ответу** %% $cookie = Cookie::make('name', 'значение'); return Response::make($content)->withCookie($cookie); %% == Переадресация == %% return Redirect::to('user/login'); %% **Переадресация с одноразовыми переменными сессии** %% return Redirect::to('user/login')->with('message', 'Войти не удалось'); %% .(alert) Метод %%with()%% сохраняет данные в сессии, поэтому вы можете прочитать их, используя обычный метод %%Session::get()%%. **Переадресация на ((docs/v4/routing#именованны+е))й маршрут** %% return Redirect::route('login'); %% **Переадресация на ((docs/v4/routing#именованны+е))й маршрут с параметрами** %% return Redirect::route('profile', array(1)); %% **Переадресация на ((docs/v4/routing#именованны+е))й маршрут с именованными параметрами** %% return Redirect::route('profile', array('user' => 1)); %% **Переадресация на действие ((docs/v4/controllers контроллера))** %% return Redirect::action('HomeController@index'); %% **Переадресация на действие ((docs/v4/controllers контроллера)) с параметрами** %% return Redirect::action('UserController@profile', array(1)); %% **Переадресация на действие ((docs/v4/controllers контроллера)) с именованными параметрами** %% return Redirect::action('UserController@profile', array('user' => 1)); %% == Шаблоны == Шаблоны (//views//) обычно содержат HTML-код вашего приложения и представляют собой удобный способ разделения логики контроллеров и обработки страниц от их представления. Шаблоны хранятся в папке %%(t)app/views%%. Простой шаблон может иметь такой вид: %%(html)

Привет,

%% Этот шаблон может быть возвращён в браузер таким образом: %% Route::get('/', function () { return View::make('greeting', array('name' => 'Тейлор')); }); %% Второй параметр, переданный в %%View::make()%% - массив данных, которые должны быть доступны внутри шаблона. **Передача переменных в шаблон** %% // Используя традиционный подход $view = View::make('greeting')->with('name', 'Стив'); // Используя магию $view = View::make('greeting')->withName('стив'); %% В примере выше переменная %%$name%% будет доступна в шаблоне и будет иметь значение %%(t)Стив%%. Можно передать массив данных в виде второго параметра для метода %%make()%%: %% $view = View::make('greetings', $data); %% Вы также можете "поделить" данные между всеми шаблонами, сделав их глобальными: %% View::share('name', 'Steve'); %% **Передача вложенного шаблона в шаблон** Иногда вам может быть нужно передать шаблон внутрь другого шаблона. Например, имея шаблон %%(t)app/views/child/view.php%% нам может понадобиться передать его в другой шаблон и мы можем сделать это так: %% $view = View::make('greeting')->nest('child', 'child.view'); $view = View::make('greeting')->nest('child', 'child.view', $data); %% Затем вложенный шаблон может быть отображён в родительском шаблоне: %%(html)

Привет!

%% %%(DOCNEW 4.2=d7b13440c003218ed79e9d508706eca01990122f 4.12.2014 5:01:15) **Определение существования шаблона** Для определения того, существует ли шаблон, используйте метод %%View::exists()%%: ~%% if (View::exists('emails.customer')) { // } ~%% %% == Составители == Составители шаблонов - функции обратного вызова или методы класса, которые вызываются, когда данный шаблон формируется (отображается) в строку. Если у вас есть данные, которые вы хотите привязать к шаблону при каждом его формировании, то составители помогут вам выделить такую логику в единое место. Таким образом, составители могут работать как "модели шаблонов" или "представители". **Регистрация составителя** %% View::composer('profile', function ($view) { $view->with('count', User::count()); }); %% Теперь при каждом отображении шаблона %%(t)profile%% к нему будет привязана переменная %%(t)count%%. Вы можете привязать составитель сразу к нескольким шаблонам: %% View::composer(array('profile','dashboard'), function ($view) { $view->with('count', User::count()); }); %% Если вам больше нравятся методы классов, что позволяет вам использовать регистрации в ((docs/v4/ioc контейнере IoC)), то вы можете сделать это так: %% View::composer('profile', 'ProfileComposer'); %% Класс составителя должен иметь такой вид: %% class ProfileComposer { public function compose($view) { $view->with('count', User::count()); } } %% %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) **Регистрация нескольких составителей** Вы можете использовать метод %%composers()%%, чтобы зарегистрировать группу составителей за один раз: ~%% View::composers(array( 'AdminComposer' => array('admin.index', 'admin.profile'), 'UserComposer' => 'user', 'ProductComposer@create' => 'product' )); ~%% %% .(alert) Нет строгого правила, где должны храниться классы-составители. Вы можете поместить их в любое место, где их сможет найти автозагрузчик в соответствии с директивами в вашем файле %%(t)composer.json%%. == Создатели == Создатели шаблонов работают почти так же, как ((#составители)), но вызываются сразу после создания объекта шаблона, а не во время его отображения в строку.Для регистрации нового создателя используйте метод %%View::creator()%%: %% View::creator('profile', function ($view) { $view->with('count', User::count()); }); %% == Особые отклики == **Создание JSON-ответа** %% return Response::json(array('name' => 'Стив', 'state' => 'CA')); %% **Создание ((ВП:JSONP))-ответа** %% return Response::json(array('name' => 'Стив', 'state' => 'CA')) ->setCallback(Input::get('callback')); %% **Создание отклика загрузки файла** %% return Response::download($pathToFile); return Response::download($pathToFile, $name, $headers); %% .(alert) Класс Symfony %%HttpFoundation%%, которая управляет загрузкой файлов, требует, чтобы загружаемый файл имел ASCII-имя. %%(DOCNEW 4.1=efd541a0b218b1c6aafb73f0051c18ed150e3c24 25.05.2014 6:21:03) == Макрос отклика == Если вы хотите зарегистрировать пользовательский отклик, который вы смогли бы использовать повторно в различных маршрутах и контроллерах, то можете использовать метод %%Response::macro()%%: ~%% Response::macro('caps', function($value) { return Response::make(strtoupper($value)); }); ~%% Функция %%macro()%% принимает имя в качестве первого аргумента и замыкание в качестве второго. Замыкание макроса будет выполнено при вызове имени макроса на классе %%Response%%: ~%% return Response::caps('foo'); ~%% Вы можете зарегистрировать свои макросы в одном из ваших файлов %%(t)app/start%%. Или вы можете организовать свои макросы в отдельном файле, который будет подключаться в одном из старт-файлов. %%