2016-07-14 65 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