【问题标题】:Including multiple variables in return statement [duplicate]在返回语句中包含多个变量[重复]
【发布时间】:2022-01-05 14:37:33
【问题描述】:

我有一个顶部带有过滤功能的概览站点。用户可以过滤位置和部门。

控制器的代码如下所示:

public function index(Request $request)
    {


        $posts = Post::orderBy('titel')
            ->get();

        $standorts = Standort::get();

        $abteilungs = Abteilung::get();

        if ($request->filled('s')) {
            $query = strtolower($request->get('s'));
            $posts = $posts->filter(function ($post) use ($query) {
                if (Str::contains(strtolower($post->Titel), $query)) {
                    return true;
                }
                return false;
            });

        }
        return view('posts.overview', ['posts' => $posts], ['standorts' => $standorts]);
    }

我还需要提供$abteilungs = Abteilung::get();,但是当我这样返回时:

return view('posts.overview', ['posts' => $posts], ['standorts' => $standorts], ['abteilungs' => $abteilungs]);

括号中的最后一部分是灰色的,我无法访问它。

有没有办法使这项工作或返回视图仅限于两个参数?

【问题讨论】:

  • 除此之外,您应该根据请求值进行条件查询,而不是从数据库中提取 everything 然后进行过滤。例如。 $posts = Post::orderBy('titel')->when($request->filled('s'), fn ($q) => $q->where('titel', 'like', '%'.$request->s.'%'))->get();
  • when() 方法仅在第一个参数为真时执行第二个参数中的回调。 laravel.com/docs/8.x/queries#conditional-clauses

标签: php laravel laravel-blade


【解决方案1】:

要将多个变量传递给您的视图,您应该这样做

return view('posts.overview', ['posts' => $posts, 'standorts' => $standorts, 'abteilungs' => $abteilungs]);

【讨论】:

  • 天哪,这有多明显?非常感谢!我什至没有考虑过这种方式,因为我提供了第二个变量,如顶部所示,带有自己的括号。欣赏它!我会尽快接受你的回答。祝你有美好的一天!
【解决方案2】:

你也可以这样试试

$data = [
    'posts' => $posts, 
    'standorts' => $standorts, 
    'abteilungs' => $abteilungs,
];

return view('posts.overview')->with($data);

或者,

return view('post.overview',compact('posts','standorts','abteilungs'));

【讨论】:

  • 嘿@Md Sohanur Ra​​haman :) 这是一个不错的方法,看起来比我当前的代码更整洁。我刚试了一下,效果很好,感谢您抽出宝贵时间回答:)
  • 这是我的荣幸。祝你有美好的一天 。快乐编码:)
【解决方案3】:

在view方法中,第二个参数是传递数据给view,你可以传递任意数量的变量 如下:

return view('post.review',['variableOne' => $variableOne,'variableTwo' => `$variableTwo,'variableThree' => $variableThree])`

【讨论】:

    【解决方案4】:

    您可以通过多种方式将变量传递给视图..

    方式 1:

    $variables = [
           'variable1'=>'something goes here',
           'variable2'=>'something goes here',
    ];
    return view('view-file')->with($variables );
    

    方式 2:

    return view('view-file')->with(['variable1'=>'something goes here','variable2'=>'something goes here']);
    

    方式 3:

    $variable1 = 'something goes here';
    $variable2 = 'something goes here';
    
    return view('view-file')->withVariabl1($variable1);
    or
    return view('view-file')->withVariabl2($variable2); 
    or
    return view('view-file')
    ->withVariable2($variable2)
    ->withVariable1($variable1); 
    

    方式 4

    $variable1 = 'something goes here';
    $variable2 = 'something goes here';
    
    return view('view-file',compact('variable1','variable2'));
    

    希望您清楚如何以多种方式发送变量以进行查看。如果您想传递 1 或 2 个变量,并且以后不需要增加变量,则建议使用 way 4。 但从我的观点和现实生活经验来看,我始终建议使用 way 1

    【讨论】:

    • 嘿,谢谢你的详细回答!! :) 欣赏它,很好地了解可能的情况,因为我是 php 和 laravel 的新手,这非常有帮助。感谢您的宝贵时间,也祝您有美好的一天:)
    • 你可以在 github 上关注我并随时敲我以获得与 php 相关的解决方案。
    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多