Laravel-传递多个变量来查看


74

我有这个站点,它的页面之一从数据库中创建了一个简单的人员列表。我需要将一个特定的人添加到我可以访问的变量中。

如何修改该return $view->with('persons', $persons);行以将$ ms变量也传递给视图?

    function view($view)
    {
        $ms = Person::where('name', 'Foo Bar');

        $persons = Person::order_by('list_order', 'ASC')->get();

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

Answers:


100

只需将其作为数组传递:

$data = [
    'name'  => 'Raphael',
    'age'   => 22,
    'email' => 'r.mobis@rmobis.com'
];

return View::make('user')->with($data);

或将它们链接起来,就像@Antonio提到的那样。


6
远远高于链“与”更优雅
秒。

3
推荐的方法是使用紧凑方法来传递变量。感觉比较优雅。
Vaishnav Mhetre,

我认为部分选择将基于数据。对于简单的变量,此方法有效,但对于嵌套数据而言,在变量compact中或在嵌套数据中,最适合在视图中进行操作。
FabricioG

96

这是您的操作方式:

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

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

您还可以使用compact()

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

    return $view->with(compact('persons', 'ms'));
}

或单行执行:

function view($view)
{
    return $view
            ->with('ms', Person::where('name', '=', 'Foo Bar')->first())
            ->with('persons', Person::order_by('list_order', 'ASC')->get());
}

甚至将其作为数组发送:

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();

    return $view->with('data', ['ms' => $ms, 'persons' => $persons]));
}

但是,在这种情况下,您将必须通过以下方式访问它们:

{{ $data['ms'] }}

是的,我在这段时间内做到了这一点。但是现在当我尝试在视图中访问它时,例如{{ $ms->name }}我得到了Undefined property: Laravel\Database\Eloquent\Query::$name我想念的东西?
2013年

您在->first()方法的第一行中缺少。
rmobis

1
刚编辑过的pjmil116添加了->first()Raphael的评论。
Antonio Carlos Ribeiro

是的,知道了。我刚刚意识到这个项目是laravel 3,因此我感到非常沮丧。必须将查询语法更改为$ms = DB::first('select * from people where name = "Foo Bar"');
pjmil 2013年

1
对于这样的常见事情,Laravel 4和3语法几乎相同。您仍然可以使用Person::where('name', '=', 'Foo Bar')->first()。编辑。
Antonio Carlos Ribeiro 2013年

30

使用紧凑

function view($view)
{
    $ms = Person::where('name', '=', 'Foo Bar')->first();

    $persons = Person::order_by('list_order', 'ASC')->get();
    return View::make('users', compact('ms','persons'));
}

21

将多个变量传递给Laravel视图

//Passing variable to view using compact method    
$var1=value1;
$var2=value2;
$var3=value3;
return view('viewName', compact('var1','var2','var3'));

//Passing variable to view using with Method
return view('viewName')->with(['var1'=>value1,'var2'=>value2,'var3'=>'value3']);

//Passing variable to view using Associative Array
return view('viewName', ['var1'=>value1,'var2'=>value2,'var3'=>value3]);

在此处阅读有关将数据传递给Laravel中的视图的信息


4

遇到类似的问题,但是如果您不一定要返回带有视图文件的视图,则可以执行以下操作:

return $view->with(compact('myVar1', 'myVar2', ..... , 'myLastVar'));

3

这个答案似乎是

位乐于助人,同时宣布大numbe变量的函数

Laravel 5.7。*

例如

public function index()
{
    $activePost = Post::where('status','=','active')->get()->count();

    $inActivePost = Post::where('status','=','inactive')->get()->count();

    $yesterdayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(-1))->get()->count();

    $todayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(0))->get()->count();

    return view('dashboard.index')->with('activePost',$activePost)->with('inActivePost',$inActivePost )->with('yesterdayPostActive',$yesterdayPostActive )->with('todayPostActive',$todayPostActive );
}

当您看到退货的最后一行时,它看起来不太好

当您的项目越来越大时,这不好

所以

public function index()
    {
        $activePost = Post::where('status','=','active')->get()->count();

        $inActivePost = Post::where('status','=','inactive')->get()->count();

        $yesterdayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(-1))->get()->count();

        $todayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(0))->get()->count();

        $viewShareVars = ['activePost','inActivePost','yesterdayPostActive','todayPostActive'];

        return view('dashboard.index',compact($viewShareVars));
    }

如您所见,所有变量都被声明为$viewShareVarsView的数组并在View中访问

但是我的功能变得非常大,所以我决定将这条线变得 非常简单

public function index()
    {
        $activePost = Post::where('status','=','active')->get()->count();

        $inActivePost = Post::where('status','=','inactive')->get()->count();

        $yesterdayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(-1))->get()->count();

        $todayPostActive = Post::whereDate('created_at', Carbon::now()->addDay(0))->get()->count();

        $viewShareVars = array_keys(get_defined_vars());

        return view('dashboard.index',compact($viewShareVars));
    }

原生php函数从函数中get_defined_vars() 获取所有已定义的变量

array_keys 获取变量名

因此在您看来,您可以访问函数内的所有已声明变量

{{$todayPostActive}}


2

请尝试一下

$ms = Person::where('name', 'Foo Bar')->first();
$persons = Person::order_by('list_order', 'ASC')->get();
return View::make('viewname')->with(compact('persons','ms'));

1
    $oblast = Oblast::all();
    $category = Category::where('slug', $catName)->first();
    $availableProjects = $category->availableProjects;
    return view('pages.business-area')->with(array('category'=>$category, 'availableProjects'=>$availableProjects, 'oblast'=>$oblast));

0

要从控制器传递多个数组数据到视图,请尝试一下。这是工作。在此示例中,我从一个表传递主题详细信息,并且主题详细信息包含类别ID,如果从另一个表类别中获取了类别ID,则类似名称之类的详细信息。

$category = Category::all();
$category = Category::pluck('name', 'id');
$item = Subject::find($id);
return View::make('subject.edit')->with(array('item'=>$item, 'category'=>$category));

0

with功能和single参数:

    $ms = Person::where('name', 'Foo Bar');
    $persons = Person::order_by('list_order', 'ASC')->get();
    return $view->with(compact('ms', 'persons'));

with功能和array参数:

    $ms = Person::where('name', 'Foo Bar');
    $persons = Person::order_by('list_order', 'ASC')->get();
    $array = ['ms' => $ms, 'persons' => $persons];
    return $view->with($array);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.