В Laravel мы все передаем данные на наш взгляд примерно так же
$data = array( 'thundercats' => 'Hoooooooooooh!' ); return View::make('myawesomeview', $data);
Но есть ли способ добавить переменные по умолчанию в представление без необходимости декларировать его снова и снова в $data
? Это было бы очень полезно для повторения переменных, таких как имена пользователей, логика PHP и даже стили CSS, если это требует сайт.
Просмотр композиторов – это обратные вызовы или методы класса, вызываемые при создании представления. Если у вас есть данные, которые вы хотите привязать к данному представлению каждый раз, когда это представление создается во всем приложении, композитор представления может организовать этот код в одном месте. Поэтому просмотр композиторов может функционировать как «модели просмотра» или «докладчики».
Определение A View Composer:
View::composer('profile', function($view) { $view->with('count', User::count()); });
Теперь каждый раз, когда создается профиль профиля, данные счета привязаны к представлению. В вашем случае это может быть для id
:
View::composer('myawesomeview', function($view) { $view->with('id', 'someId'); });
Таким образом, $id
будет доступен для вашего просмотра myawesomeview
каждый раз, когда вы создаете представление, используя:
View::make('myawesomeview', $data);
Вы также можете присоединить композитор представления к нескольким представлениям одновременно:
View::composer(array('profile','dashboard'), function($view) { $view->with('count', User::count()); });
Если вы предпочтете использовать композитор на основе классов, который обеспечит преимущества разрешения через приложение IoC Container , вы можете сделать это:
View::composer('profile', 'ProfileComposer');
Класс композитора представления должен быть определен следующим образом:
class ProfileComposer { public function compose($view) { $view->with('count', User::count()); } }
Документация, и вы также можете прочитать эту статью .
Есть несколько способов, до сих пор я экспериментировал с некоторыми.
1. Используйте синглтон, вы можете поместить его в route.php
App::singleton('blog_tags', function() { return array( 'Drupal' => 'success', 'Laravel' => 'danger', 'Symfony' => 'dark', 'Wordpress' => 'info' ); });
2.Используйте настройки, загрузите здесь. https://github.com/Phil-F/Setting . Вы можете поместить это в контроллер или шаблон.
Setting::set('title', 'Scheduler | Mathnasium');
3.Use View share, в значительной степени используйте его в своем шаблоне
Controller: Views::share('theme_path', 'views/admin/'); Template: <link href="{{ $theme_path }}/assets/bootstrap.min.css"/>
4. Моя текущая настройка образца, я написал конструкцию в HomeController.
public function __construct() { // Define a theme namespace folder under public View::addLocation('../public/views/admin'); View::addNamespace('admin', '../public/views/admin'); View::share('theme_path', 'views/admin/'); // Set default page title Setting::set('title', 'Scheduler | Mathnasium'); Setting::set('description', 'daily customer scheduler.'); Setting::set('keywords', ['Reservation', 'Planner']); Setting::set('page-title', ''); }
@enchance, как альтернатива использованию '*', как упоминалось в вашем комментарии, возможно, вам поможет и View :: share. Из документации Laravel:
Вы также можете поделиться куском данных во всех представлениях:
View :: share ('name', 'Steve');
Выдержка из http://laravel.com/docs/responses
Да там совсем есть способ – см. Здесь на вид композиторов .
Вы можете использовать это для добавления данных в представление или набор представлений.