Как передать данные для просмотра в Laravel?
Я передаю данные в мое представление блейда с помощью return View::make('blog', $posts);
, и в моем представлении блейда я пытаюсь запустить @foreach ($posts as $post)
, в итоге я получаю сообщение об ошибке, в котором говорится, что $posts
не определен.
Мой вопрос в том, как будет называться массив $posts
?
12 answers
Вы можете передать данные в представление с помощью метода with
.
return View::make('blog')->with('posts', $posts);
Вероятно, стоит упомянуть, что начиная с Laravel 5 передача данных в представление теперь выполняется следующим образом:
return view("blog", ["posts"=>$posts]);
Или:
return view(“blog”, compact(“posts”));
Документация доступна здесь.
Вы также можете передать массив в качестве второго аргумента после имени шаблона представления, вместо того, чтобы связывать вместе кучу методов ->with()
.
return View::make('blog', array('posts' => $posts));
Или, если вы используете PHP 5.4 или лучше, вы можете использовать гораздо более приятный синтаксис "короткого" массива:
return View::make('blog', ['posts' => $posts]);
Это полезно, если вы хотите вычислить массив в другом месте. Например, если у вас есть набор переменных, которые каждый контроллер должен передать в представление, и вы хотите объединить это с уникальным массивом переменных для каждого конкретного контроллера (например, с помощью array_merge
) вы можете вычислить $variables
(который содержит массив!):
return View::make('blog', $variables);
(Я сделал это с самого начала: дайте мне знать, если в вас проскользнула синтаксическая ошибка...)
Если вы хотите передать только одну переменную для просмотра, вы можете использовать
В контроллере
return view('blog')->withTitle('Laravel Magic method.');
В просмотр
<div>
Post title is {{$title}}.
</div>
Если вы хотите передать несколько переменных для просмотра, вы можете использовать
В контроллере
return view('blog')->withTitle('Laravel magic method')->withAuthor('Mister Tandon');
В просмотр
<div>
Post title is {{$title}}.Author Name is {{$author}}
</div>
use TCG\Voyager\Models\Jobtype;
class FormController extends Controller
{
public function index()
{
$category = Jobtype::all();
return view('contact', compact('category'));
}
}
- используйте свою модель
- назначьте его переменной
- передайте объект в представление Вот пример:
Контроллер:
use App\your_model_name;
funtion index()
{
$post = your_model_name::all();
return view('index')->with('this_will_be_used_as_variable_in_views',$post);
}
Индекс:
<h1> posts</h1>
@if(count($this_will_be_used_as_variable_in_views)>0)
@foreach($this_will_be_used_as_variable_in_views as $any_variable)
<ul>
<p> {{$any_variable->enter_table_field}} </p>
<p> {{$any_variable->created_at}} </p>
</ul>
@endforeach
@else
<p> empty </p>
@endif
Надеюсь, это поможет!:)
Советы 1:
Используя с помощью(), это лучшая практика
return view('about')->withName('Author Willson')->withJob('Writer');
return View::make('home')->with(compact('about'))
return View::make('home')->with('comments', $comments);
Советы 2:
Использование компактного()
return view(about, compact('post1','post2'));
Советы 3:
Использование Вторых Параметров:
return view("about", ["comments"=>$posts]);
Вы также можете сделать то же самое другим способом,
Если вы используете PHP 5.5 или последнюю версию, вы можете сделать это следующим образом,
Контроллер:
return view(index, compact('data1','data2')); //as many as you want to pass
Просмотр:
<div>
You can access {{$data1}}. [if it is variable]
</div>
@foreach($data1 as $d1)
<div>
You can access {{$d1}}. [if it is array]
</div>
@endforeach
Таким же образом вы можете получить доступ ко всем переменным, которые вы передали в компактной функции.
Надеюсь, это поможет:)
Вы можете передать данные в представление с помощью метода with.
return view('greeting', ['name' => 'James']);
Вы также можете написать для передачи нескольких данных с вашего контроллера в представление
return \View::make('myHome')
->with(compact('project'))
->with(['hello'=>$hello])
->with(['hello2'=>$hello2])
->with(['hello3'=>$hello3]);
Например, у вас есть массив с вашими данными.
$array1 = $data;
$array2 = $data;
С вашего контроллера вы можете передать эту переменную с помощью compact. Вы можете передать столько массивов, сколько захотите.
return view('data.index',compact('array1','array2'));
Здесь данные - это папка в представлении, а индекс - файл с расширением index.blade.php
В представлении вы можете вызывать массивы следующим образом
@foreach ($array1 as $something)
// some operation
@endforeach
Вы можете использовать следующее для передачи данных для просмотра в Laravel:
public function contact($id) {
return view('contact',compact('id'));
}