(可选)在Laravel 5中传递单个视图参数

时间:2016-02-10 09:49:06

标签: php laravel-5.1

考虑这种情况,我希望SOMETIMES将数据传递到我的视图:

public function show($orderId)
{
    if ($sometimesTrue == true)
    {
        $optionalParameter = 'optional parameter';
    }

    return view('show', compact([$a, $b, $c, $optionalParameter]));
}

$optionalParameter并不总是设置,所以我想知道我的选项是什么,用于设置单独的,可选的视图参数,而无需重新安排函数的结构。

在Zend中,以下是可能的:

$this->view->optionalParameter = $optionalParameter;

哪个可以在控制器方法中的任何位置,而不仅仅是在view实例化的末尾。当然,回到Laravel,我可以做一些事情:

public function show($orderId)
{
    $paramaterArray = [$a, $b, $c];

    if ($sometimesTrue == true)
    {
        $optionalParameter = 'optional parameter';
        $paramaterArray[] = $optionalParameter;
    }

    return view('show', compact($paramaterArray));
}

但由于引入了可选参数,因此重新排列整个函数似乎有点限制。有什么办法可以为视图设置个别参数吗?

3 个答案:

答案 0 :(得分:0)

您可以在protected function课程中构建自己的protected property + Controller。你可以这样做:

Beneath正在使用splat运算符,因此它只能在php 5.6> =

中使用
protected $optionalParameter;

protected function optionalcompact(...$parameters) {
    if(!empty($this->optionalParameter)){
        return compact($parameters, $this->optionalParameter);
    } else {
        return compact($parameters);
    }
}

然后回到你自己构建的控制器类中,你可以这样做:

public function show($orderId)
{    
    if ($sometimesTrue == true)
    {
        $this->optionalParameter = 'optional parameter';
    }

    return view('show', $this->optionalcompact($a, $b, $c));
}

答案 1 :(得分:0)

我只想使用以下

public function show($orderId)
{
    $paramaterArray = [$a, $b, $c];

    $paramaterArray['optional'] = $sometimesTrue == true ? 'optional parameter' : '';

    return view('show', $paramaterArray);
}

由于这是一个可选参数,所以我不需要每次在我的视图中检查是否设置,只需{{ $optional }}可以更好地工作,它就会成为如果设置了任何值,则打印,如果$optional变量为空,则不会打印任何内容。这样,我就会保持一致。

此外,您可以查看Larave的View Composers,它可能对您有帮助。

答案 2 :(得分:0)

进一步研究,似乎使用compact和变量的名称(而不是变量本身)将默默地忽略丢失的变量,该变量给出了预期的行为:

$var1 = 'bob';
$var2 = 'nigel';

var_dump(compact('var1', 'var2', 'var3'));

返回:

array(2) { ["var1"]=> string(3) "bob" ["var2"]=> string(5) "nigel" }

这适用于我的场景。通过这种方式使用它,控制器方法不需要重构,也不需要额外的编码。是否依赖compact不发出警告是良好的编码实践是另一个问题。

只是为了确认,用变量本身调用compact会抛出notice警告:

$var1 = 'bob';
$var2 = 'nigel';

var_dump(compact($var1, $var2, $var3));

返回:

NOTICE Undefined variable: var3 on line number 4