2016-07-14 2 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プロパティを作成してください。href =" {{$ status-> toggleUrl}} "' –

+0

@BenSwinburne私は、レポやモデルの$ 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文の代わりに "?:"を使用します。次の三項演算子と置き換えたものを参照してください。

<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 ]) 

物の「ステータス」、ならびにこのステータス表示はレイアウトで表示され、混合・アンド・マッチングに関連付けられた表示用のシングルポイントの変更を可能にするという利点を有します。 (Ieは、あなたが<a>でそれをしたいが、多分また<div><span>かもしれないだけ。

+0

これは本当に良い考えですが、 '$ status'(モデルから)名は変わるかもしれませんが、ロジックは同じ有効/無効です。例えば、私は '$ customer-> enabled'を含んでいる顧客モデルを持っているかもしれません - あなたはどうしますか? –

+0

私は、 'enabled'特性を持っていることを示す' interface'をクラスに実装させて、その動作をサポートするものはすべて渡すことができます。 – bishop

関連する問題