Laravel: Использование контроллера во включенном виде
У меня есть представление, которое отображается с его контроллером. Функция, которая вызывает представление, связана в моих маршрутах. Он работает нормально при прямом доступе к маршруту, но, очевидно, мой контроллер не включается, когда я включаю его в свой шаблон.
Как мне использовать мой контроллер, когда я включаю свой вид?
Я на Laravel 3.
Прямо сейчас у меня есть мой контроллер:
public function get_current()
{
// $sales = ...
return View::make('sale.current')->with('sales',$sales);
}
Мой маршрут (который работает только на GET /current):
Route::get('current', 'sale@current');
Мой главный вид
@include('sale.current')
Тогда мой просмотр sale.current называет продажи $
@foreach($sales as $sale)
Спасибо!
1 ответ
Итак, это тот случай, когда вы хотите вызвать какое-либо действие контроллера laravel из представления для визуализации другого частичного представления. Хотя там можно найти ту или иную хитрость. Однако обратите внимание, что контроллеры laravel не предназначены для этого.
Когда вы сталкиваетесь с этим сценарием, когда хотите повторно использовать одно и то же представление снова, но не хотите снова и снова предоставлять все необходимые данные в нескольких действиях контроллера, пришло время изучить Laravel View Composers.
Вот официальная ссылка на документацию: https://laravel.com/docs/master/views
Вот более подробная его версия: https://scotch.io/tutorials/sharing-data-between-views-using-laravel-view-composers
Это стандартный способ добиться этого без каких-либо исправлений.
Ваш вопрос все еще неясен, но я могу попытаться помочь вам. Я сделал небольшой пример с требованиями, которые вы дали. Я создаю маршрут к контроллеру действий следующим образом:
Route::get('test', 'TestController@test');
В TestController
Я определяю действие test
следующее:
public function test()
{
return View::make('test.home')->with('data', array('hello', 'world', '!'));
}
Согласно вашему запросу, вы определили представление, которое включает в себя содержимое из другого представления (макета), и в этом макете вы используете данные, переданные для контроллера действий. Я создаю виды следующим образом:
// home.blade.php
<h1>Message</h1>
@include('test.test')
а также
// test.blade.php
<?php print_r($data); ?>
Когда я получаю доступ к "test", я вижу вывод print_r. Я не знаю, если это то, что вы делаете, но в моем случае работает нормально.
Я надеюсь, что это может помочь вам.