考虑这种情况,我希望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));
}
但由于引入了可选参数,因此重新排列整个函数似乎有点限制。有什么办法可以为视图设置个别参数吗?
答案 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