2016-05-25 5 views
5
.

. Я пытаюсь создать директиву блейдов, которая является переменной echo (если определена переменная) или echo «no data», если переменная не определена.Проверьте, существует ли переменная в директиве blade-сервера laravel.

Это мой код в AppServiceProvider.php:

<?php 

namespace App\Providers; 

use Blade; 
use Illuminate\Support\ServiceProvider; 


class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Blade::directive('p', function($ex) { 
      error_log(print_r($ex,true)); 
      return '<?php $defined_vars = get_defined_vars(); if(array_key_exists(\''. $ex .'\', $defined_vars)): echo ' . $ex . ' ; else: echo \'no data\'; endif;?>'; 
     }); 
    } 

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

Вот мой index.blade.php:

<p class="lead">@p($myvar)</p> 

Но моя директива "р" дает "нет данных", если переменная не определена. Если я использую ошибку isset: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

Как проверить внутренние директивы, если определена переменная?

+0

Так вы говорите, если (Исеть ($ MyVar)) не работает? –

ответ

1

Что вы пытаетесь передать своей собственной директиве? Если это просто строка/int, то это должно работать.

Blade::directive('p', function($expression){ 
    $output = $expression ? $expression : 'nodata'; 
    return "<?php echo {$output}; ?>"; 
}); 

В лезвию Шаблон

@p('Foo') 
+0

Я хочу использовать его как '@p ($ subtitle)' на мой взгляд. И если я использую ваше решение, я получил эту ошибку: 'Undefined variable: subtitle' – pupadupa

+0

@pupadupa Вы ​​передали переменную $ subtitle в свое представление? Похоже, что лезвие не может найти вашу переменную. – Jeemusu

+0

В этом проблема - проверить директивы, если переменная не существует. Есть ли способ вернуть 'nodata' из директивы, если я не передал переменную для просмотра? – pupadupa

7

Вы можете использовать функциональные возможности Лезвия для проверки Исеть т.е.

{{ $checkvariable or 'not-exist' }} 

https://laravel.com/docs/5.2/blade#displaying-data

+0

В будущем я хочу добавить более сложные логики в свою директиву. Например, для пользователя auth используется другой стиль. Поэтому я хочу просто набрать 'p ($ foo)' in view вместо повторения '{{$ checkvariable или 'not-exist'}}' и логики для проверки подлинности. – pupadupa

2

Попробуйте проверить, если переменная пуста:

@if(empty($myvar)) 
    <p>Data does not exist</p> 
@else 
    <p>Your data is here!</p> 
@endif 

Можно также проверить this thread

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