【问题标题】:How to pass data to view in Laravel?如何传递数据以在 Laravel 中查看?
【发布时间】:2021-12-29 14:13:36
【问题描述】:

我使用return View::make('blog', $posts); 将数据传递到我的刀片视图,在我的刀片视图中我试图运行@foreach ($posts as $post) 我最终得到一个错误,指出$posts 未定义。

我的问题是如何调用$posts 数组?

【问题讨论】:

  • return View::make('blog',compact('posts'));
  • 要明确,第二个参数需要是关联数组:array('posts' => $posts),或者你可以使用with()方法,如接受的答案所示。
  • return view('blog',compact('posts'));

标签: php laravel pass-data laravel-views


【解决方案1】:

您可以使用with 方法将数据传递给视图。

return View::make('blog')->with('posts', $posts);

【讨论】:

  • 如何通过收藏?
  • 如何显示?
  • @MadhuramanGhimire write @foreach($posts as $post){ {{$post->title}} {{$post->author}} } 或视图中需要的任何其他数据.
【解决方案2】:

您还可以将数组作为视图模板名称之后的第二个参数传递,而不是将一堆->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);

(我不经意间就这样做了:如果出现语法错误,请告诉我...)

【讨论】:

  • 请澄清我的概念!! array('posts' => $posts)我没见过这种数组这是匿名数组???它的名字在哪里??我只知道这个数组有键值对
  • 你可以称它为匿名数组。因此,在这种情况下,当“posts”数组传递给视图时,该键将用作访问数组内部 $posts 的名称。
【解决方案3】:

值得一提的是,从 Laravel 5 开始,向视图传递数据现在是这样完成的:

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

或者:

return view("blog", compact("posts"));

文档可通过here获取。

【讨论】:

  • 是的,但我仍然使用 with() 将引导闪存错误/成功消息发送到视图。不知道如何使用 compact() 来完成。
  • @Don'tDownvoteMe 您可以将两者结合使用。 return view("blog", compact("posts"))->with("success", "Hooray!");
  • @miken32 谢谢 Mike,从来不知道我们可以使用 with() 和 compact()。
【解决方案4】:

如果你只想传递一个变量来查看,你可以使用

控制器

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>

【讨论】:

  • 感谢您还展示了如何在刀片模板中使用变量。这就是我缺少的部分。
【解决方案5】:

你也可以用另一种方式做同样的事情,

如果您使用的是 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

同样的方式你可以访问你在紧凑函数中传递的所有变量。

希望对你有帮助:)

【讨论】:

    【解决方案6】:

    您可以使用 with 方法将数据传递给视图。

    return view('greeting', ['name' => 'James']);
    

    【讨论】:

      【解决方案7】:
      use TCG\Voyager\Models\Jobtype;
      
      class FormController extends Controller
      {
      public function index()
      {
         $category = Jobtype::all();
         return view('contact', compact('category'));
      
      }
      }
      
      • 使用你的模型
      • 将其分配给变量
      • 将对象传递给视图 这是一个例子:

      【讨论】:

        【解决方案8】:

        控制器:

        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
        

        希望这会有所帮助! :)

        【讨论】:

          【解决方案9】:

          您还可以编写将多个数据从控制器传递到视图

           return \View::make('myHome')
                      ->with(compact('project'))
                      ->with(['hello'=>$hello])
                      ->with(['hello2'=>$hello2])
                      ->with(['hello3'=>$hello3]);
          

          【讨论】:

            【解决方案10】:

            提示1:

            使用 With(),这是最佳实践

            return view('about')->withName('Author Willson')->withJob('Writer');
            return View::make('home')->with(compact('about'))
            return View::make('home')->with('comments', $comments);
            

            提示2:

            使用 compact()

            return view(about, compact('post1','post2'));
            

            提示3:

            使用第二个参数:

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

            【讨论】:

            • 为什么选择最佳实践技巧1?不能直接用type2吗?
            【解决方案11】:

            您可以使用以下方式传递数据以在 Laravel 中查看:

            public function contact($id) {
                return view('contact',compact('id'));
            }
            

            【讨论】:

              【解决方案12】:

              例如,您有一个包含数据的数组。

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

              从您的控制器中,您可以使用 compact 传递此变量。您可以传递任意数量的数组。

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

              这里的data是视图中的一个文件夹,index是扩展名为index.blade.php的文件

              在视图中你可以这样调用数组

              @foreach ($array1 as $something)
                 // some operation
              @endforeach
              

              【讨论】:

                【解决方案13】:

                对于任何人来说,如果您有大量变量要传递给视图,或者您希望变量可以同时被多个视图访问,这真的很乏味,这是另一种方式

                在控制器中,您将要传递的变量定义为global,并将值赋予这些变量。

                例如global $variable; $variable = 1;

                现在在视图中,在顶部,只需执行

                &lt;?php global $variable;?&gt;

                然后您现在可以从视图中的任何位置调用您的变量,例如

                {{$variable}}
                

                希望这对某人有所帮助。

                【讨论】:

                • 这是个坏建议。您可以轻松地将数据传递给控制器​​中的视图,为什么要将其放在全局范围内? @tkc
                【解决方案14】:

                你也可以这样做

                $arr_view_data['var1'] = $value1;
                $arr_view_data['var2'] = $value2;
                $arr_view_data['var3'] = $value3;
                
                return view('your_viewname_here',$arr_view_data);
                

                您访问此变量以查看$var1,$var2,$var3

                【讨论】:

                  【解决方案15】:

                  您可以使用 compact 将表数据传递给查看。

                  $users = RoleModel::get();
                   return view('super-admin',compact('users'));
                  

                  【讨论】:

                    【解决方案16】:

                    好的,所有答案都告诉您如何将数据传递给视图,但没有人解释如何在视图中读取它。
                    如果你使用:

                     //Routes/web.php
                     ...
                     Route::get('/user', function () {
                        return view('profile', [
                           'variable1' => 'value1' ,
                           'variable2'=> 'value2' , // add as much as you want
                        ]);
                     });
                    

                    要在视图中读取这些变量(在本例中为 profile.blade.php 文件):

                    @if($variable1)
                    
                     <p> variable1 = {{  $variable1  }}</p>
                    
                    @endif
                    

                    Laravel 完成所有必要的工作并为你创建 $variable1

                    【讨论】:

                      猜你喜欢
                      • 2017-01-11
                      • 2017-07-30
                      • 2016-05-18
                      • 2015-11-03
                      • 1970-01-01
                      • 2015-12-27
                      • 2021-04-19
                      相关资源
                      最近更新 更多