2016-07-14 77 views
1

我已经使用了条件hrefa块。Laravel View - 提高可读性

如何让代码更清晰以提高可读性?

<a type="button" class="btn btn-sm text-complete" href="/settings/statuses/{{$status->id}}/@if ($status->enabled == 0) enable @else disable @endif"> 
    @if ($status->enabled == 0) Enable @else Disable @endif 
</a> 
+0

也许在你的'$ status'对象上创建一个URL属性(通过一个访问器)。'''' –

+0

@BenSwinburne我认为这意味着我必须去通过repo或model中的$ status循环并添加href链接 –

+0

如果'$ status'引用雄辩模型,则可以使用访问器(https://laravel.com/docs/master/eloquent-mutators#accessors和增变器)即时生成财产。 –

回答

2

假设状态是一个模型(虽然你可以把它放在任何它是有一个状态)。

// app/Traits/HasToggleableStatus.php 
trait HasToggleableStatus 
{ 
    public function getStatusToggleUrlAttribute() 
    { 
    $action = $this->enabled ? 'enable' : 'disable'; 

    return url("settings/statuses/{$this->id}/{$action}"); 
    } 
} 

// Customer.php 
use App\Traits\HasToggleableStatus; 

class Customer extends Eloquent 
{ 
    use HasToggleableStatus; 

    protected $appends = ['statusToggleUrl']; 
} 

// Markup in view 
<a type="button" class="btn btn-sm text-complete" 
    href="{{$status->statusToggleUrl}}"> 
    {{ $status->enabled ? 'Disable' : 'Enable' }} 
</a> 
+0

是否有可能以某种方式使其成为全球?某些型号也将启用/禁用 - 例如'$ customer-> enabled' –

+0

将功能写入特征或基础控制器。我将添加一个特征示例。 –

0

使用三元操作“?:”而不是常规if else语句。参考以下chagnes我已经取代,如果其他与三元操作符。

<a type="button" class="btn btn-sm text-complete" href="/settings/statuses/{{$status->id}}/{{$status->enabled == 0 ? enable : disable }}"> 
{{$status->enabled == 0 ? enable : disable }} 
</a> 
1

必然是主观的答案,并亲自我的微观点的风扇,所以我可能会定义一个子视图,它接受一个对象,可以将它的状态改变。

// status-display.blade.php 
@if ($object instanceof StatusInterface) 
    @if ($object->enabled) 
     Disable 
    @else 
     Enable 
    @endif 
@else 
    Unknown 
@endif 

// foo.blade.php 
<a type="button" class="btn btn-sm text-complete" href="/settings/statuses/{{$status->id}}/"> 
    @include('status-display', [ 'object' => $status ]) 
</a> 

// bar.blade.php 
@include('status-display', [ 'object' => $customer ]) 

具有允许与所述的东西“状态”相关联的显示单点变化,以及混合和匹配,其中该状态显示显示在布局的优点。 (比如,你可能不仅希望它在<a>,但也许也是一个<div><span>

+0

这真的是个好主意,但'$ status'(来自模型)名称可能会有所不同,但逻辑是相同的启用/禁用。例如,我可能有一个客户模型,其中也包含'$ customer-> enabled' - 你会怎么做? –

+0

我想让这个类实现一个'interface',它表明它具有'enabled'特性,那么你就可以传递任何支持这种行为的东西。 – bishop