खोज…


परिचय

लारवेल विभिन्न प्रकार की कक्षाओं तक पहुंच की अनुमति देता है जिन्हें सेवा कहा जाता है। कुछ सेवाएँ बॉक्स से बाहर उपलब्ध हैं, लेकिन आप उन्हें स्वयं बना सकते हैं।

एक सेवा का उपयोग एप्लिकेशन की कई फाइलों में किया जा सकता है, जैसे नियंत्रक। आइए एक ऐसी सेवा की कल्पना करें, जिसमें हमारी सेवा एक getNumber() OurService लागू हो getNumber() एक यादृच्छिक संख्या लौटाए getNumber()

class SomeController extends Controller {
    
    public function getRandomNumber()
    {
        return app(OurService::class)->getNumber();
    }
}

एक सेवा बनाने के लिए, केवल एक नया वर्ग बनाना आवश्यक है:

# app/Services/OurService/OurService.php

<?php
namespace App\Services\OurService;

class OurService 
{
    public function getNumber()
    {
        return rand();
    }
}

इस समय, आप पहले से ही इस सेवा का उपयोग एक नियंत्रक में कर सकते हैं, लेकिन आपको हर बार एक नई वस्तु की आवश्यकता होगी।

class SomeController extends Controller {
    
    public function getRandomNumber()
    {
        $service = new OurService();
        return $service->getNumber();
    }

    public function getOtherRandomNumber()
    {
        $service = new OurService();
        return $service->getNumber();
    }
}

यही कारण है कि अगला कदम आपकी सेवा को सेवा कंटेनर में पंजीकृत करना है। जब आप सेवा को कंटेनर में पंजीकृत करते हैं, तो आपको हर बार एक नई वस्तु बनाने की आवश्यकता नहीं होती है।

सेवा कंटेनर में सेवा पंजीकृत करने के लिए, आपको एक सेवा प्रदाता बनाना होगा। यह सेवा प्रदाता कर सकता है:

  1. अपनी सेवा को रजिस्टर कंटेनर में पंजीकृत करें )
  2. बूट सेवा के साथ आपकी सेवा (निर्भरता) में अन्य सेवाओं को इंजेक्ट करना

एक सेवा प्रदाता एक वर्ग सार वर्ग का विस्तार है Illuminate\Support\ServiceProviderसेवा कंटेनर में किसी सेवा को पंजीकृत करने के लिए register() विधि को लागू करना register() :

# app/Services/OurService/OurServiceServiceProvider.php

<?php
namespace App\Services\OurService;

use Illuminate\Support\ServiceProvider;

class OurServiceServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('OurService', function($app) {
            return new OurService();
        });
    }
}

सभी सेवा प्रदाता config/app.php में एक सरणी में सहेजे config/app.php । इसलिए हमें अपने सेवा प्रदाता को इस सरणी में पंजीकृत करना होगा:

return [

    ...

    'providers' => [

        ...

        App\Services\OurService\OurServiceServiceProvider::class,

        ...

    ],

    ...

];

अब हम अपनी सेवा को एक कंट्रोलर में एक्सेस कर सकते हैं। तीन संभावनाएँ:

  1. निर्भरता अन्तःक्षेपण:
<?php
namespace App\Http\Controllers;

use App\Services\OurService\OurService;

class SomeController extends Controller
{
    public function __construct(OurService $our_service)
    {
        dd($our_service->getNumber());
    }
}
  1. app() माध्यम से पहुंच app() सहायक:
<?php
namespace App\Http\Controllers;

use App\Services\OurService\OurService;

class SomeController extends Controller
{
    public function getRandomNumber()
    {
        return app('OurService')->getNumber();
    }
}

लारवेल फेकैड्स, काल्पनिक कक्षाएं प्रदान करता है जिन्हें आप अपनी सभी परियोजनाओं में उपयोग कर सकते हैं और एक सेवा को प्रतिबिंबित कर सकते हैं। अपनी सेवा को अधिक आसानी से एक्सेस करने के लिए, आप एक मुखौटा बना सकते हैं:

<?php
namespace App\Http\Controllers;

use Randomisator;

class SomeController extends Controller
{
    public function getRandomNumber()
    {
        return Randomisator::getNumber();
    }

}

एक नया मुखौटा बनाने के लिए, आपको Illuminate\Support\Facades\Facade विस्तार करने वाला एक नया वर्ग बनाने की आवश्यकता है। इस वर्ग को getFacadeAccessor() पद्धति को लागू करने और सेवा प्रदाता द्वारा पंजीकृत सेवा का नाम वापस करने की आवश्यकता है:

# app/Services/OurService/OurServiceFacade.php

<?php
namespace App\Services\OurService;

use Illuminate\Support\Facades\Facade;

class OurServiceFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'OurService';
    }
}

आपको अपने मुखौटा को config/app.php में पंजीकृत करने की भी आवश्यकता है:

return [

    ...

    'aliases' => [

        ....

        'Randomisator' => App\Services\OurService\OurServiceFacade::class,
    ],

];

मुखौटा अब आपकी परियोजना में कहीं भी सुलभ है।

यदि आप अपनी सेवाओं को अपने विचारों से एक्सेस करना चाहते हैं, तो आप एक सहायक फ़ंक्शन बना सकते हैं। कुछ सहायक के साथ लारवेल जहाज बॉक्स से बाहर निकलते हैं, जैसे कि auth() फ़ंक्शन या view() फ़ंक्शन। एक सहायक फ़ंक्शन बनाने के लिए, एक नई फ़ाइल बनाएं:

# app/Services/OurService/helpers.php    

if (! function_exists('randomisator')) {
    /**
     * Get the available OurService instance.
     *
     * @return \App\ElMatella\FacebookLaravelSdk
     */
    function randomisator()
    {
        return app('OurService');
    }
}

आपको इस फ़ाइल को पंजीकृत करने की भी आवश्यकता है, लेकिन आपकी composer.json फ़ाइल में:

{

    ...

    "autoload": {
        "files": [
            "app/Services/OurService/helpers.php"
        ],

        ...
    }
}

अब आप इस सहायक का उपयोग दृश्य में कर सकते हैं:

<h1>Here is a random number: {{ randomisator()->getNumber() }}</h1>


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow