Laravel 4 — Где позвонить Посмотреть :: поделиться

все

я знаю 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,

Вроде все ок, я в замешательстве. Кто-нибудь знает?

Заранее спасибо.

0

Решение

Это потому что ваш View::share заявление никогда не запускается для других маршрутов. В Laravel 4.x, Есть довольно много мест, где вы можете поместить его туда, где он будет запускаться каждый раз, но эти два наиболее часто используются:

  1. Самый простой и простой способ — просто добавить его в конец app/start/global.php который запускается на Начните каждого запроса, для всех сред.

  2. Другой способ — создать нового поставщика услуг, убедиться, что он автоматически загружается, и добавить его в свой app/config/app.php«s providers массив.

Если все, что вам нужно, — это поделиться несколькими взглядами, я бы сказал, что создавать своеобразный новый класс для этого просто излишне. Если, однако, вы начинаете замечать app/start/global.php файл становится слишком загроможденным, я бы порекомендовал вам начать разбивать вещи на поставщиков услуг.

PS: В Ларавеле 5, app/start/global.php был удален, и вы остались только со вторым вариантом.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]