все
я знаю View::share
должен быть доступен в любом месте в моем приложении, общее место в моем routes.php
файл.
Я делаю это.
1) Система входа в систему пользователя, после входа в систему, поделиться что-то для всех просмотров.
2) когда пользователь нажимает на другие страницы, может использовать общие переменные.
Хорошо, мой контроллер.
public function index() {
$data = array(
"pageTitle" => "index",
);
$privilegeMenu = $this->privilegeApi->getUserPrivilegeByUserId(Session::get('uid'));
$topMenus = $this->menuApi->getTopMenuById($privilegeMenu);
$subMenus = $this->menuApi->getSubMenuesById($privilegeMenu);
View::share('topMenus', $topMenus);
View::share('subMenus', $subMenus);
return View::make('home.index',$data);
}
Итак, поскольку я использую View share, то есть в любых других представлениях, я могу использовать topMenus
а также subMenus
сейчас.
Но когда я нажимаю на другие страницы, я получаю сообщение об ошибке: Undefined variable: topMenus
,
Итак, я так растерялся, что случилось? Я погружаюсь в View :: поделиться исходным кодом
У Laravel есть класс с именем Environment
под namespace Illuminate\View
,
protected $shared = array();
public function share($key, $value = null)
{
if ( ! is_array($key)) return $this->shared[$key] = $value;
foreach ($key as $innerKey => $innerValue)
{
$this->share($innerKey, $innerValue);
}
}
public function shared($key, $default = null)
{
return array_get($this->shared, $key, $default);
}
И я обнаружил, когда пользователь успешно вошел в систему, topMenus
успешно поделился Но когда я нажимаю на другие страницы, не могу topMenus
в shared
,
Вроде все ок, я в замешательстве. Кто-нибудь знает?
Заранее спасибо.
Это потому что ваш View::share
заявление никогда не запускается для других маршрутов. В Laravel 4.x, Есть довольно много мест, где вы можете поместить его туда, где он будет запускаться каждый раз, но эти два наиболее часто используются:
Самый простой и простой способ — просто добавить его в конец app/start/global.php
который запускается на Начните каждого запроса, для всех сред.
Другой способ — создать нового поставщика услуг, убедиться, что он автоматически загружается, и добавить его в свой app/config/app.php
«s providers
массив.
Если все, что вам нужно, — это поделиться несколькими взглядами, я бы сказал, что создавать своеобразный новый класс для этого просто излишне. Если, однако, вы начинаете замечать app/start/global.php
файл становится слишком загроможденным, я бы порекомендовал вам начать разбивать вещи на поставщиков услуг.
PS: В Ларавеле 5, app/start/global.php
был удален, и вы остались только со вторым вариантом.
Других решений пока нет …