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 вызывает $sales

@foreach($sales as $sale)

Спасибо!


person veksen    schedule 18.08.2013    source источник
comment
Не могли бы вы предоставить код? Непонятно, что вы спрашиваете.   -  person treeface    schedule 19.08.2013
comment
Так и сделал, надеюсь теперь стало понятнее :)   -  person veksen    schedule 19.08.2013


Ответы (2)


Так что это тот случай, когда вы хотите вызвать какое-то действие контроллера laravel из представления, чтобы отобразить другое частичное представление. Хотя вокруг него можно найти тот или иной хак. Однако обратите внимание, что контроллеры laravel не предназначены для этого.

Когда вы сталкиваетесь с этим сценарием, когда хотите снова использовать одно и то же представление, но не хотите снова и снова предоставлять все необходимые данные в нескольких действиях контроллера, самое время изучить Laravel View Composers.

Вот официальная ссылка на документацию: https://laravel.com/docs/master/views#view-composers

Вот более подробная версия: https://scotch.io/tutorials/sharing-data-between-views-using-laravel-view-composers

Это стандартный способ добиться этого без каких-либо исправлений.

person Dhrumil Bhankhar    schedule 20.09.2019

Ваш вопрос все еще не ясен, но я могу попытаться вам помочь. Я сделал небольшой пример с требованиями, которые вы дали. Я создаю маршрут к контроллеру действий следующим образом:

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); ?>

Когда я получаю доступ к «тесту», я вижу вывод print_r. Я не знаю, если это то, что вы делаете, но в моем случае работает нормально.

Надеюсь, это поможет вам.

person Darwing    schedule 23.08.2013
comment
Спасибо за ответ, но я пытаюсь сделать наоборот. Думайте о своем представлении test как о модуле, который может быть где угодно. Представление «тест» нуждается в возможности включения на любую страницу, но это не означает, что оно будет включено. Итак, каков наилучший способ добиться этого? Передача моих данных в моем доме для каждого запроса не может быть хорошей, и у меня уже есть определенный контроллер для моего представления test. - person veksen; 24.08.2013
comment
Возможно, вам поможет определение section, содержащего общие данные. Я думаю, что вложенные представления связаны с тем, чего вы хотите достичь. Здесь вы можете увидеть все возможные варианты использования представлений и ответов в Laravel 3. - person Darwing; 24.08.2013