Как передать данные для просмотра в Laravel?


Я передаю данные в мое представление блейда с помощью return View::make('blog', $posts);, и в моем представлении блейда я пытаюсь запустить @foreach ($posts as $post), в итоге я получаю сообщение об ошибке, в котором говорится, что $posts не определен.

Мой вопрос в том, как будет называться массив $posts?

 37
Author: Rubens Mariuzzo, 2013-08-20

12 answers

Вы можете передать данные в представление с помощью метода with.

return View::make('blog')->with('posts', $posts);
 53
Author: Mostafa Adly, 2013-08-20 19:44:23

Вероятно, стоит упомянуть, что начиная с Laravel 5 передача данных в представление теперь выполняется следующим образом:

return view("blog", ["posts"=>$posts]);

Или:

return view(“blog”, compact(“posts”));

Документация доступна здесь.

 25
Author: miken32, 2018-09-24 23:58:47

Вы также можете передать массив в качестве второго аргумента после имени шаблона представления, вместо того, чтобы связывать вместе кучу методов ->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);

(Я сделал это с самого начала: дайте мне знать, если в вас проскользнула синтаксическая ошибка...)

 9
Author: iconoclast, 2014-05-21 15:45:45

Если вы хотите передать только одну переменную для просмотра, вы можете использовать

В контроллере

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>
 7
Author: mistertandon, 2017-01-24 04:59:19
use TCG\Voyager\Models\Jobtype;

class FormController extends Controller
{
public function index()
{
   $category = Jobtype::all();
   return view('contact', compact('category'));

}
}
  • используйте свою модель
  • назначьте его переменной
  • передайте объект в представление Вот пример:
 6
Author: li bing zhao, 2017-07-10 06:01:02

Контроллер:

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

Надеюсь, это поможет!:)

 3
Author: kamal, 2017-11-07 10:21:14

Советы 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]);
 2
Author: venkatSkpi, 2018-06-27 06:14:12

Вы также можете сделать то же самое другим способом,

Если вы используете 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

Таким же образом вы можете получить доступ ко всем переменным, которые вы передали в компактной функции.

Надеюсь, это поможет:)

 1
Author: Sagar Naliyapara, 2017-04-25 04:58:54

Вы можете передать данные в представление с помощью метода with.

return view('greeting', ['name' => 'James']);
 1
Author: Jay Momaya, 2017-05-11 13:11:14

Вы также можете написать для передачи нескольких данных с вашего контроллера в представление

 return \View::make('myHome')
            ->with(compact('project'))
            ->with(['hello'=>$hello])
            ->with(['hello2'=>$hello2])
            ->with(['hello3'=>$hello3]);
 1
Author: user9389401, 2018-02-21 06:44:42

Например, у вас есть массив с вашими данными.

$array1  =  $data;
$array2 = $data;

С вашего контроллера вы можете передать эту переменную с помощью compact. Вы можете передать столько массивов, сколько захотите.

return view('data.index',compact('array1','array2'));

Здесь данные - это папка в представлении, а индекс - файл с расширением index.blade.php

В представлении вы можете вызывать массивы следующим образом

@foreach ($array1 as $something)
   // some operation
@endforeach
 0
Author: user3677355, 2018-09-24 22:47:28

Вы можете использовать следующее для передачи данных для просмотра в Laravel:

public function contact($id) {
    return view('contact',compact('id'));
}
 0
Author: TheName, 2018-09-25 02:00:53