php मैं लार्वेल 5 में वैश्विक सहायक कार्यों कैसे बना सकता हूं?




laravel-5 blade (3)

अगर मैं कुछ currentUser() लिए एक currentUser() फ़ंक्शन बनाना चाहता हूं, तो मैं ऐसा कर रहा हूं जहां मैं इसे किसी दृश्य में या नियंत्रक में उपयोग कर सकता हूं (सोच रेल, जहां आप helper_method: current_user करते हैं helper_method: current_user एप्लिकेशन नियंत्रक में helper_method: current_user )।

जो कुछ भी मैं पढ़ता हूं वह एक सहायक फ़ोल्डर बनाने और वहां फ़ंक्शन जोड़ने के लिए कहता है और फिर आप Helpers::functionName कर सकते हैं क्या यह ऐसा करने का सही तरीका है?

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


लैरवेल वैश्विक सहायक

प्रायः आपको अपने स्वयं को एक उपयोगिता फ़ंक्शन की आवश्यकता होती है जो पूरे एप्लिकेशन में वैश्विक रूप से पहुंच जाती है। लार्वेल अपने डिफ़ॉल्ट सहायकों को कैसे लिखते हैं, इस बात से उधार लेते हुए आप अपने कस्टम कार्यों के साथ क्षमता बढ़ाने में सक्षम हैं।

सहायक नहीं, फ़ाइल नहीं, सहायक फ़ाइल बनाएँ

मैं आपको एक फाइल पसंद करता हूं, न कि कक्षा में, क्योंकि मैं नामस्थानों से परेशान नहीं होना चाहता हूं और मैं चाहता हूं कि इसके कार्य वर्ग उपसर्गों के बिना सुलभ हो जाएं: greeting('Brian'); हेलपर के बजाय Helper::greeting('Brian'); जैसे लार्वेल अपने सहायकों के साथ करता है।

फ़ाइल: app/Support/helper.php

संगीतकार के साथ सहायक फ़ाइल पंजीकृत करें: composer.json

{
    ...
    "autoload": {
        "classmap": [
            "database"
        ],
        "files": [
            "app/Support/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    ...
}

अपना पहला सहायक फ़ंक्शन बनाएं

<?php

if (!function_exists('greet')) {
    /**
     * Greeting a person
     *
     * @param  string $person Name
     * @return string
     */
    function greet($person)
    {
        return 'Hello ' . $person;
    }
}

उपयोग:

अपने कार्यों तक पहुंचने का प्रयास करने से पहले फ़ाइल को स्वत: लोड करना याद रखें: composer dump-autoload

चलो टिंकर के साथ परीक्षण करते हैं

$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.0.6 ΓÇö cli) by Justin Hileman
>>> greet('Brian');
=> "Hello Brian"
>>> exit
Exit:  Goodbye.

ब्लेड के साथ

<p>{{ greet('Brian') }}</p>

ब्लेड निर्देश के रूप में उन्नत उपयोग:

एक बार आप अपने आप को एक सादे फ़ंक्शन के बजाय ब्लेड निर्देश का उपयोग करना चाहते हैं। AppServiceProvider की बूट विधि में ब्लेड निर्देश पंजीकृत करें: app/Providers/AppServiceProvider.php

public function boot()
{
    // ...
    Blade::directive('greet', function ($expression) {
        return "<?php echo greet({$expression}); ?>";
    });
}

उपयोग: <p>@greet('Brian')</p>

नोट: आपको कैश दृश्यों को स्पष्ट करने की आवश्यकता हो सकती है php artisan view:clear


वैश्विक फ़ंक्शन फ़ाइल बनाने का एक और प्रभावी तरीका यह है कि इसे सीधे संगीतकार से स्वतः लोड करना है। संगीतकार का स्वत: लोड खंड एक files सरणी स्वीकार करता है जो स्वचालित रूप से लोड हो जाता है।

  1. जहां भी आप चाहें एक functions.php फ़ाइल बनाएं, इस उदाहरण में, हम इसे app/Helpers अंदर बनाने जा रहे हैं।

  2. अपने कार्यों को जोड़ें, लेकिन कक्षा या नामस्थान नहीं जोड़ें।

    <?php
    
    function global_function_example($str)
    {
       return 'A Global Function with '. $str;
    }
    
  3. autoload खंड के अंदर composer.json में निम्न पंक्ति जोड़ें:

    "files": ["app/Helpers/functions.php"]
    

लार्वेल 5 के लिए:

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": ["app/Helpers/functions.php"]
},
  1. composer dump-autoload

बधाई हो! अब आप global_function_example('hello world') तक पहुंच सकते हैं जिसमें ब्लेड व्यू सहित आपके एप्लिकेशन के किसी भी हिस्से का फॉर्म है।

मुझे उम्मीद है कि यह किसी के लिए उपयोगी है!


अपने ऐप / हेल्पर्स निर्देशिका में एक नई फाइल बनाएं इसे नाम दें AnythingHelper.php मेरे सहायक का एक उदाहरण है:

<?php
function getDomesticCities()
{
$result = \App\Package::where('type', '=', 'domestic')
    ->groupBy('from_city')
    ->get(['from_city']);

return $result;
}

कमांड का पालन करके अपने सहायक के लिए एक सेवा प्रदाता उत्पन्न करें

php artisan make:provider HelperServiceProvider

अपने नए जेनरेट किए गए HelperServiceProvider.php के रजिस्टर फ़ंक्शन में निम्न कोड जोड़ें

require_once app_path('Helpers/AnythingHelper.php');

अब आपके कॉन्फ़िगरेशन / app.php में इस सेवा प्रदाता को लोड करें और आप कर चुके हैं

'App\Providers\HelperServiceProvider',




helpers