लारावेल 5 - ब्लेड में स्विच करें


80

मैं ब्लेड टेम्पलेट्स में स्विच का उपयोग कैसे कर सकता हूं? जब मैंने इस्तेमाल किया:

@switch($login_error)
    @case(1)
        `E-mail` input is empty!
        @break
    @case(2)
        `Password` input is empty!
        @break
@endswitch

परिणाम में मैं इस पाठ को सादे के रूप में देखता हूं। मैं कोड के कुछ टुकड़े में स्विच का उपयोग करना पसंद करता हूं क्योंकि जब मैं उपयोग कर रहा हूं तो यह मेरे लिए अधिक साफ है।

लेकिन अगर यह संभव नहीं है तो इसे लिखें।



@ventaquil चयनित उत्तर गलत है। क्या मेरे द्वारा पोस्ट किए गए उत्तर को बदला जा सकता है?
कप्तानब्लॉक

@captainblack माफ़ करें लेकिन यह समाधान Laravel 5.2+ के लिए है - हम 5.1 LTS का उपयोग कर रहे हैं।
वेंटेकिल

4
लार्वा 5.5 स्विच स्टेटमेंट का परिचय देता है। आपका कोड ठीक से प्रस्तुत करना चाहिए।
szaman

जवाबों:


129

अद्यतन 2020 उत्तर

Laravel 5.5 के बाद से @switch ब्लेड में बनाया गया है। इसे नीचे दिखाए अनुसार उपयोग करें।

@switch($login_error)
    @case(1)
        <span> `E-mail` input is empty!</span>
        @break

    @case(2)
        <span>`Password` input is empty!</span>
        @break

    @default
        <span>Something went wrong, please try again</span>
@endswitch

पुराना उत्तर

दुर्भाग्य से लारवेल ब्लेड में स्विच स्टेटमेंट नहीं है। आप Laravel का उपयोग कर सकते हैं यदि अन्य दृष्टिकोण या उपयोग सादे PHP स्विच का उपयोग करें। आप किसी भी अन्य PHP अनुप्रयोग की तरह ब्लेड टेम्पलेट में सादे PHP का उपयोग कर सकते हैं। लारवेल 5.2 से शुरू होकर अप @ एफपी स्टेटमेंट का उपयोग करें।

विकल्प 1:

@if ($login_error == 1)
    `E-mail` input is empty!
@elseif ($login_error == 2)
    `Password` input is empty!
@endif

29

आप इन कोड को AppServiceProvider वर्ग बूट विधि में जोड़ सकते हैं।

Blade::extend(function($value, $compiler){
        $value = preg_replace('/(\s*)@switch\((.*)\)(?=\s)/', '$1<?php switch($2):', $value);
        $value = preg_replace('/(\s*)@endswitch(?=\s)/', '$1endswitch; ?>', $value);
        $value = preg_replace('/(\s*)@case\((.*)\)(?=\s)/', '$1case $2: ?>', $value);
        $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value);
        $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', '<?php break;', $value);
        return $value;
    });

तो आप के रूप में उपयोग कर सकते हैं:

@switch( $item )
    @case( condition_1 )
        // do something
    @breakswitch
    @case( condition_2 )
        // do something else
    @breakswitch
    @default
        // do default behaviour
    @breakswitch
@endswitch

इसका आनंद लें ~


यह काम नहीं करता है। parse error, expecting & quot; एंडवॉच (T_ENDSWITCH) & quot; & # 039; या &quot;case (T_CASE)&quot;&#039; or & quot; डिफ़ॉल्ट (T_DEFAULT) `
mkmnstr

@mkmnstr, preg_replace मेथड में `` `को` `को बदलने का प्रयास करें?
जर्मे

5
इन टिप्पणियों के बाद से किसी को भी उकसाया? क्या यह काम करता है?
जोनाथन

1
लारवेल 5.4 का उपयोग करना, मेरे लिए काम नहीं करता है। FatalThrowableError क्लास 'App \ Providers \ Blade' नहीं मिला
Kyle Challis

1
यह 5.5 पर काम करता है। मैं बस यह जानने के लिए उत्सुक हूँ कि इसे phpstorm autocompletion (या किसी भी IDE) @Geyey के साथ काम करने के लिए कैसे प्राप्त किया जाए?
माइकल विलेन्यूवे

22

LARAVEL 5.2 और उत्तर प्रदेश में:

PHP स्टेटमेंट खोलने और बंद करने के बीच अपना सामान्य कोड लिखें।

@php
switch (x) {
    case 1:
        //code to be executed
        break;
    default:
        //code to be executed
}
@endphp

2
यह @phpवाक्य विन्यास L5.2>
अलेक्जेंडर किम


5

लारवेल 5.1 में, यह ब्लेड में काम करता है:

<?php
    switch( $machine->disposal ) {
        case 'DISPO': echo 'Send to Property Disposition'; break;
        case 'UNIT':  echo 'Send to Unit'; break;
        case 'CASCADE': echo 'Cascade the machine'; break;
        case 'TBD':   echo 'To Be Determined (TBD)'; break;
    }
?>

0

आप ब्लेड को इस तरह बढ़ा सकते हैं:

    Blade::directive('switch', function ($expression) {
        return "<?php switch($expression): ?>";
    });
    Blade::directive('case', function ($expression) {
        return "<?php case $expression: ?>";
    });
    Blade::directive('break', function () {
        return "<?php break; ?>";
    });
    Blade::directive('default', function () {
        return "<?php default: ?>";
    });
    Blade::directive('endswitch', function () {
        return "<?php endswitch; ?>";
    });

फिर आप निम्नलिखित का उपयोग कर सकते हैं:

@switch($test)
@case(1)
        Words
@break
@case(2)
    Other Words
    @break
@default
    Default words
@endswitch

हालाँकि चेतावनी में ध्यान दें: http://php.net/manual/en/control-structures.alternative-syntax.php

यदि स्विच () और पहले मामले के बीच कोई व्हाट्सएप है तो पूरा कोड ब्लॉक विफल हो जाएगा। यह एक ब्लेड सीमा के बजाय एक PHP सीमा है। आप सामान्य वाक्यविन्यास जैसे को मजबूर करके इसे बायपास करने में सक्षम हो सकते हैं:

Blade::directive('switch', function ($expression) {
    return "<?php switch($expression) { ?>";
});
Blade::directive('endswitch', function ($) {
    return "<?php } ?>";
});

लेकिन यह थोड़ा गलत लगता है।


-2

'स्विच ()' में स्थान को दूर करने के लिए, आप कोड का उपयोग कर सकते हैं:

Blade::extend(function($value, $compiler){
    $value = preg_replace('/(\s*)@switch[ ]*\((.*)\)(?=\s)/', '$1<?php switch($2):', $value);
    $value = preg_replace('/(\s*)@endswitch(?=\s)/', '$1endswitch; ?>', $value);
    $value = preg_replace('/(\s*)@case[ ]*\((.*)\)(?=\s)/', '$1case $2: ?>', $value);
    $value = preg_replace('/(?<=\s)@default(?=\s)/', 'default: ?>', $value);
    $value = preg_replace('/(?<=\s)@breakswitch(?=\s)/', '<?php break;', $value);
    return $value;
  });

-5

जब आप अपने विचारों के भीतर स्विच स्टेटमेंट का उपयोग करना शुरू करते हैं, तो आमतौर पर यह संकेत मिलता है कि आप अपने कोड को फिर से फैक्टर कर सकते हैं। व्यावसायिक तर्क विचारों के लिए नहीं है, मैं आपको सुझाव दूंगा कि आप अपने नियंत्रक के भीतर स्विच स्टेटमेंट करें और फिर दृश्य में स्विच स्टेटमेंट परिणाम पास करें।


9
निष्पक्ष होने के लिए, स्विच स्टेटमेंट निश्चित रूप से दृश्य में हो सकते हैं। उदाहरण के लिए, यदि आप किसी तालिका में डेटा श्रेणियों के आधार पर CSS कक्षाएं स्थापित कर रहे हैं, तो आप नियंत्रक में प्रदर्शन तर्क एम्बेड नहीं करना चाहेंगे।
CashIsClay

"व्यापार तर्क विचारों के लिए नहीं है,"। व्यापार तर्क दृश्य परत, तर्क परत और दृढ़ता परत के लिए है। इसकी थकाऊ और निरर्थक लेकिन एक गुणवत्ता कोड ऐसा करता है।
मैगनेन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.