2016-06-20 3 views
0

Как установить значение по умолчанию для переменной в частичном разрезе?Значение переменной по умолчанию в лезвии Laravel

Так, например, у меня есть 2 переменные:

  • softDelete
  • удалить

ведьму я хочу по умолчанию, чтобы быть правдой.

@if($softDelete) 
    <span data-toggle="tooltip" title="Publish"> 
     <a href="#delete-{{ $id }}" class="btn btn-default btn-xs btn-flat"> 
      <i class="fa fa-check"></i> 
     </a> 
    </span> 
@endif 

@if($delete) 
    <span data-toggle="tooltip" title="Delete"> 
     <a href="#delete-{{ $id }}" class="btn btn-danger btn-xs btn-delete btn-flat details" data-toggle="modal" data-target="#delete_modal"> 
      <i class="fa fa-trash"></i> 
     </a> 
    </span> 
@endif 

И когда я отправляю представление от контроллера, чтобы изменить значение для некоторых переменных, в зависимости от случая, в котором я нуждаюсь.

return view('platform.pages.blocks.property_table_actions', 
    [ 
     'id' => $model->id, 
     'delete' => false 
    ]); 

Я попытался с провайдером:

public function composeActionButtons() 
{ 
    view()->composer('platform.pages.blocks.property_table_actions', function ($view) { 
     $view 
      ->with('softDelete', true) 
      ->with('delete', true) 
      ->with('view', true) 
      ->with('edit', true); 
    }); 
} 

, но переопределить ложные значения из контроллера.

+2

Вы можете использовать тройной ярлык лезвия '{{$ delete или true}}' – Tomanow

+0

Неопределенная переменная: delete. –

+0

@IonVasile Тогда ваше утверждение «Я имею 2 переменные» неверно, по крайней мере, в области представления. – ceejayoz

ответ

2

Иногда вам может потребоваться повторить переменную, но вы не уверены, была ли установлена ​​переменная. В основном, вы хотите сделать это:

{{isset ($ name)? $ Имя: 'По умолчанию'}}

Однако, вместо того, чтобы писать трехкомпонентную заявление, Blade позволяет использовать следующие удобные укороченные:

{{$ имя или 'по умолчанию'}}


из Laravel документы .. он должен проверить с IsSet, если переменная существует .. если не значение по умолчанию отображается

+0

Логика не хороша: '@if (isset ($ edit) или true) @ endif' всегда будет правдой. По умолчанию должен быть установлен способ установить для всех переменных значение true, и когда я визуализирую представление, чтобы установить false только кнопку, которая мне нужна. –

+0

, чтобы быть понятным, вы хотите, чтобы все переменные по умолчанию были истинными, только если вы переопределите его в контроллере как ложное? –

+0

Да, это то, что я хочу. –

-2

В controller.php

function __construct() { 
    $softDelete= true; 
    $data = array('softDelete' => $softDelete); 
    view()->share($data); 
} 
0

Я думаю, что вы приближаетесь к этой задаче неправильным образом - лично. Но если вы настаиваете, вы можете просто включить частичное (иногда я это делаю). Скажем, в переменной и т.д.

Например, что-то вроде этого:

// in your view 
@include('some.directory.for.partials', ['softDelete' => 'false']) // you can change this to any value 

// partial can then run something like this: 
@if(count($softDelete) || $softDelete) 
    ... 
@else 
    ... 
@endif 

Это говорит, я думаю, вы могли бы, вероятно, просто присвоить переменной в контроллере, когда вы рендеринга Посмотреть. В любом случае вы назначаете переменную. Почему все сложнее с композитором представления - когда эта логика может быть в вашем контроллере? Просто установите 'delete' => false в true или у вас есть для каждого.

+0

Я хотел бы знать, как лучше всего поступить. Как бы вы приблизились? Чтобы быть ясным, я хочу, чтобы все переменные по умолчанию были true, только если я переопределяю его в контроллере как false. –

+0

Я бы определил переменную уже в контроллере перед визуализацией представления. Вы уже делаете это в своем обратном представлении (... 'anyways. Определите переменную там. Не делайте вещи сложными. :) –

+0

Да, но у меня есть 20 crud контроллеров, и для каждого из них у меня есть или нет есть некоторые из этих кнопок. И по умолчанию я хочу, чтобы все переменные были истинными. В вопросе я дал 2 кнопки в качестве примера, но в моем случае у меня 5. Поэтому, если я последую вашему примеру, мне придется писать для каждой из этих кнопок, если это правда или ложно. И мое намерение состояло в том, чтобы объявить ложным, если только это необходимо. –

0

Я нашел лучший способ быть это:

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\Log; 
use Illuminate\Support\Facades\View; 
use Illuminate\Support\ServiceProvider; 

class ViewComposerServiceProvider extends ServiceProvider 
{ 
/** 
* Bootstrap the application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    $this->composeActionButtons(); 
} 

/** 
* Register the application services. 
* 
* @return void 
*/ 
public function register() 
{ 
    // 
} 

/** 
* Compose the Recent sidebar 
*/ 
public function composeActionButtons() 
{ 
    view()->creator('platform.pages.blocks.property_table_actions', function ($view) { 
     $view 
      ->with('softDelete', true) 
      ->with('delete', true) 
      ->with('view', true) 
      ->with('edit', true); 
    }); 

} 
} 

и в контроллере:

return view('platform.pages.blocks.property_table_actions', 
    [ 
     'id' => $model->id, 
    ]) 
    ->with(['edit' =>false, 'softDelete' => false]); 

Посмотреть создатели работают почти так же, как просмотреть композиторов; однако они запускаются немедленно, когда представление создается. Обратный вызов, который я определил с Творцом, вызывается сразу после view(), который перед любым -> с() s. Это позволяет мне установить значение по умолчанию для представления, а затем переопределить его при вызове вида, если это необходимо.

+0

Выглядит хорошо - если он работает, он работает. :) Нет, вам не нужно использовать 'with' дважды, чтобы он мог принимать массивы. Итак, '-> with (['edit' => false, 'softDelete' => false]);' –

+0

О, хорошо знать. :) –

+0

Проверка ч ... https://laravel.com/docs/5.2/views#passing-data-to-views –

Смежные вопросы