Laravel5 как передать массив в вид

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

контроллер

 class StoreController extends Controller

 {
    public function index()
    {
        $store = Store::all(); // got this from database model
        return view('store', $store); 
    }
 {

посмотреть

// try a couple of differnt things nothing works 

print_r($store); 
print_r($store[0]->id);
print_r($id); 

8 ответов


public function index()
{
  $store = Store::all(); // got this from database model

  return view('store')->with('store', $store); 
}

у вас есть три варианта в целом.

  1. return view('store')->with('store', $store);

  2. return view('store')->withStore($store);

  3. return view('store')->with(compact('store'));

1.Создает переменную с именем store который будет доступен в вашем view и сохраняет значение в переменной $store в нем.

2.Сокращенное выше.

3.Также короткая рука, и она создает то же имя переменной, что и значение, передающее один.

теперь в вашей view вы можете получить доступ к этой переменной, используя

{{ $store->name }}

это будет то же самое для всех 3 методов.


попробуй такое

public function index()
{
    return view('store', ['store' => Store::all()]); 
}

затем вы можете получить доступ к $store в своем обзоре.


оба ответа, предоставленные до сих пор, решат вашу проблему, но также стоит знать, что ваш оригинальный подход к предоставлению $store в качестве второго аргумента view() почти правильно. Вам не хватало того, что аргумент должен быть массивом переменных, которые вы хотите передать в представление.

Я, вероятно, пошел бы с return view('store', compact('store')); но вы также могли бы использовать return view('store', ['store' => $store]);.


попробуйте это :

    class StoreController extends Controller
 {
    public function index()
    {
        $store = Store::all(); // got this from database model
        return view('store')->withStore($store); 
    }
 }


View :


{{$store->id}}

это работает для меня. Вы можете использовать 'compact' следующим образом:


в личинке v5.6.3, я передаю массив от контроллера для просмотра, как это,

$data = array(
    'title' => 'Welcome to Laravel',
    'services' => ['Web Design', 'Programming', 'SEO']
);

return view('pages.index', compact('data'));

и в HTML, вы можете прочитать массив,

@if(count($data['services']) > 0)
    <ul>
        @foreach($data['services'] as $service)
        <li>{{$service}}</li>
        @endforeach
    </ul>
@endif

даже если другие методы отлично работают, предлагаемый способ использует помощник compact () в качестве параметра.

public function index()
{
  $stores = Store::all(); // got this from database model

  return view('store', compact('stores')); 
}

в laravel 5.2 метод" with () " также используется для передачи данных в ваше представление, компактный помощник может обрабатывать несколько переменных.

источник: Laravel docs и личный опыт.


Я же оспорить с помощью

return view('store', compact('store'));

но я, скорее, используя <?php foreach()... ?>внутри файла Блейда для тестирования. Я перешел на {{ }} синтаксис blade, и теперь все работает нормально.