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);
}
у вас есть три варианта в целом.
return view('store')->with('store', $store);
return view('store')->withStore($store);
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}}
в личинке 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, и теперь все работает нормально.