Php 存在变量且为true时的刀片条件渲染

Php 存在变量且为true时的刀片条件渲染,php,laravel,laravel-blade,Php,Laravel,Laravel Blade,当参数设置为true时,我希望有条件地向刀片组件添加属性和类。当参数未设置时,我希望将其计算为falsy 情况如下: 如果参数(已定义并)设置为true,则渲染该类 如果参数为false或undefined,则不要呈现该类 视图: @include('my-component',['disabled'=>true]) @include('my-component')/*隐式:disabled=false*/ 组成部分: 按钮 当参数未明确设置为false(未定义)时,此代码将抛出一个未

当参数设置为true时,我希望有条件地向刀片组件添加属性和类。当参数未设置时,我希望将其计算为falsy

情况如下:

  • 如果参数(已定义并)设置为true,则渲染该类
  • 如果参数为false或undefined,则不要呈现该类
视图:

@include('my-component',['disabled'=>true])
@include('my-component')/*隐式:disabled=false*/
组成部分:


按钮
当参数未明确设置为false(未定义)时,此代码将抛出一个
未定义变量:disabled
。我设法使其工作的唯一方法是将disabled参数设置为false,如下所示:

@include('my-component',['disabled'=>false])
出于可读性和维护原因,我想省略这个
disabled=>false
,因为这是默认状态


为了在视图中保持相同的语法,应该如何更改组件代码?

刀片组件可以接受道具,然后可以添加基于道具的类

对于匿名组件

@props(['disabled' => false])
<button 
    {{
        $atttributes->merge([
            'disabled' => $disabled,
            'class' => $disabled ? 'Button--disabled' : ''
        ])
    }}
>
    {{ $slot }}
</button>
@props(['disabled'=>false])
合并([
“已禁用”=>$disabled,
'class'=>$disabled'?按钮--disabled':'
])
}}
>
{{$slot}

刀片组件可以接受道具,然后根据道具类添加道具

对于匿名组件

@props(['disabled' => false])
<button 
    {{
        $atttributes->merge([
            'disabled' => $disabled,
            'class' => $disabled ? 'Button--disabled' : ''
        ])
    }}
>
    {{ $slot }}
</button>
@props(['disabled'=>false])
合并([
“已禁用”=>$disabled,
'class'=>$disabled'?按钮--disabled':'
])
}}
>
{{$slot}

谢谢,看起来不错!我想知道为什么需要
$attributes->merge([…])
?如果未定义,
$disabled
,是否可以将其删除,但为其指定一个默认值?是的,其可能的$attributes->merge()允许具有默认属性,并在使用组件时定义合并属性。例如:
foo将被合并/添加到类列表中。声明
@props(['disabled'=>false])时,默认值分配给$disabled。
我明白了。在我的例子中,组件的声明与
组件不同。它只使用了
@include
语法,因此在这种情况下使用
@props
似乎不起作用。Laravel组件非常适合您的用例,您甚至可以使用一个完整的类作为组件视图的控制器排序。请看一下docsDoes“Lavarel组件”是指
语法还是
@include
语法?对于这个项目,我不想对控制器文件使用
语法,因为它太冗长了。我不是PHP开发人员,所以我发现文档很难导航:/也许在这种情况下最好的选择是不要忽略falsy参数valuesThanks,这看起来不错!我想知道为什么需要
$attributes->merge([…])
?如果未定义,
$disabled
,是否可以将其删除,但为其指定一个默认值?是的,其可能的$attributes->merge()允许具有默认属性,并在使用组件时定义合并属性。例如:
foo将被合并/添加到类列表中。声明
@props(['disabled'=>false])时,默认值分配给$disabled。
我明白了。在我的例子中,组件的声明与
组件不同。它只使用了
@include
语法,因此在这种情况下使用
@props
似乎不起作用。Laravel组件非常适合您的用例,您甚至可以使用一个完整的类作为组件视图的控制器排序。请看一下docsDoes“Lavarel组件”是指
语法还是
@include
语法?对于这个项目,我不想对控制器文件使用
语法,因为它太冗长了。我不是PHP开发人员,所以我发现文档很难导航:/在这种情况下,最好的选择是不要忽略falsy参数值