2016-05-25 17 views
5

में वैरिएबल मौजूद है, तो मैं ब्लेड निर्देश बनाने की कोशिश कर रहा हूं जो वैरिएबल को प्रतिबिंबित करता है (यदि परिवर्तनीय परिभाषित) या परिवर्तनीय अपरिभाषित होने पर "डेटा नहीं" गूंजता है।जांचें कि क्या लैरवेल के ब्लेड निर्देश

यह 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> 

लेकिन मेरे निर्देश "पी" देता है "कोई डेटा" यदि चर को परिभाषित किया। यदि मैं जारी त्रुटि त्रुटि का उपयोग करता हूं: Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

परिवर्तनीय परिभाषित किए गए मैं निर्देशों के अंदर कैसे जांच सकता हूं?

+0

जांच कर सकता है तो तुम कह रहे हो अगर (isset ($ myVar)) काम नहीं करता है? –

उत्तर

1

आप अपने कस्टम निर्देश को पारित करने का प्रयास कर रहे हैं? यदि यह केवल एक स्ट्रिंग/int है तो निम्नलिखित कार्य करना चाहिए।

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

ब्लेड खाका में

@p('Foo') 
+0

मैं इसे अपने दृश्य में '@p ($ उपशीर्षक)' जैसे उपयोग करना चाहता हूं। और यदि मैं आपके समाधान का उपयोग करता हूं तो मुझे यह त्रुटि मिली: 'अपरिभाषित चर: उपशीर्षक' – pupadupa

+0

@pupadupa क्या आपने अपने दृश्य में $ उपशीर्षक चर पारित किया है? ब्लेड की तरह लगता है कि आपका चर नहीं मिल सकता है। – Jeemusu

+0

यह समस्या है - यदि चर मौजूद नहीं है तो निर्देशों में जांचें। क्या निर्देश से 'नोडाटा' वापस करने का कोई तरीका है, अगर मैंने चर को देखने के लिए पास नहीं किया है? – pupadupa

7

आप की जाँच के लिए ब्लेड कार्यक्षमता में उपयोग कर सकते हैं isset यानी

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

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

+0

भविष्य में मैं अपने निर्देश में अधिक जटिल तर्क जोड़ना चाहता हूं। उदाहरण के लिए लेखक उपयोगकर्ता के लिए अलग शैली। इसलिए मैं '{{$ चेकवार्य या 'अस्तित्व में नहीं'}} और 'ऑथ चेक के लिए तर्क दोहराने के बजाय' p ($ foo) 'दृश्य में टाइप करना चाहता हूं। – pupadupa

2

यदि चर खाली है देखने का प्रयास करें:

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

भी this thread

संबंधित मुद्दे