Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
शुरूआत करने के लिए, मैं Laravel आधिकारिक साइट से helpers के बारे में बात करूंगा।
Laravel में विभिन्न ग्लोबल "helper" PHP फ़ंक्शन शामिल हैं। इनमें से कई फ़ंक्शंस फ़्रेमवर्क से ही उपयोग किये जाती हैं; हालांकि, यदि आप उन्हें सुविधाजनक पाते हैं, तो आप अपने स्वयं के अनुप्रयोगों में उनका उपयोग करने के लिए स्वतंत्र हैं।
तो, मूल रूप से, Laravel में हेल्पर बिल्ट-इन फंक्शन्स हैं जिन्हे आप अपनी एप्लीकेशन में कहीं से भी कॉल कर सकते हैं। यदि वे कोर फ्रेमवर्क द्वारा प्रदान नहीं किए जाएं, तो आप शायद स्वयं की helper classes को विकसित कर सकते हैं।
हालांकि कोर पहले से ही विभिन्न प्रकार के helpers को उपलब्ध कराता है, वहां हमेशा एक मौका है कि आपको अपने helper की जरूरत पड़ेगी और आप इसे विकसित करना चाहते हैं ताकि आपको यहां और वहां एक ही कोड को दोहराना नहीं पड़े, इस प्रकार बेहतर रखरखाव लागू किया जा सके। आप सीखेंगे कि इस ट्यूटोरियल में एक कस्टम Laravel helper कैसे बनाया जाए।
Laravel में Helpers
जैसा कि हमने पहले ही चर्चा की, Laravel फ्रेमवर्क के मुख्य भाग में बहुत सारे helpers उपलब्ध हैं। वे प्रदान की जाने वाली कार्यक्षमता के आधार पर समूहीकृत (grouped) किये जाता है। यहां helper समूहों की एक सूची है
Arrays
इस समूह के helpers array एलिमेंट्स को मैनिपुलेट करने के लिए कार्यक्षमता प्रदान करते हैं। अधिक बार नहीं, आप स्थिति में हैं जहां आप array एलिमेंट्स पर अलग-अलग ऑपरेशन करना चाहते हैं। तो यह वह जगह है जहां आपको पहले देखना चाहिए कि आप जो खोज रहे हैं वह पहले से मौजूद है या नहीं।
Paths
मुझे इस श्रेणी में helpers बहुत उपयोगी लगते हैं। वे अलग-अलग डायरेक्टरी के path जैसे app, storage, config, और इसी के जैसे दूसरे को return करते हैं। मुझे यकीन है कि आप पहले से ही अपने Laravel एप्लीकेशन में इन helpers का उपयोग कर रहे हैं।
Strings
स्ट्रिंग manipulation आपके दिन-प्रतिदिन एप्लीकेशन डेवलपमेंट में अनिवार्य है। यद्यपि PHP स्वयं बहुत सारे स्ट्रिंग manipulation फंक्शन्स उपलब्ध कराती है, लेकिन आपको इस अनुभाग में कुछ और भी उपयोगी चीज़े मिलेगी।
URLs
आप इस श्रेणी में बहुत कम पाएंगे, लेकिन उनका उपयोग पूरे एप्लिकेशन में किया जाता है। वे route, asset, और form action URL उत्पन्न करने के लिए उपयोग किए जाते हैं।
Miscellaneous
इस श्रेणी में helpers शामिल हैं जो logging से debugging और कई तरह के कार्यों को प्रदान करते हैं।
Laravel helpers के पूरे रिफरेन्स के लिए, आधिकारिक डॉक्यूमेंटेशन की तुलना में कोई बेहतर स्थान नहीं है।
अपना पहला कस्टम Helper बनाएं
अब आपको Laravel helpers के बारे में एक बुनियादी समझ है और वे किसलिए उपयोग किये जाते हैं। इस खंड में, मैं आगे बढ़ता हूं और प्रदर्शित करता हूं कि आप अपने खुद के कस्टम helper कैसे बना सकते हैं जो कि आपके Laravel एप्लीकेशन में ग्लोबली इस्तेमाल किया जा सकता है।
चीजों को सरल और समझने में आसान रखने के लिए, यह एक बहुत ही बुनियादी helper होगा जो एक userid लेता है और रिस्पांस के रूप में username return करता है। बेशक, यह फैंसी नहीं लगता है, लेकिन मेरा मानना है कि यह कांसेप्ट को प्रदर्शित करने के लिए पर्याप्त है, और आप हमेशा अपनी जटिल आवश्यकताओं को पूरा करने के लिए इसे एक्सटेंड कर सकते हैं।
मैं मानता हूँ कि आपके डेटाबेस में आपके पास एक users table है और इसमें कम से कम दो फ़ील्ड-userid और username हैं।
एक Larvel Helper के स्केलेटन
इससे पहले कि हम आगे बढ़ें और वास्तव में फाइल बनाते हैं, हम उन फाइलों पर जल्दी से एक नजर डालते हैं, जो हम बाकी आर्टिकल में बना रहे हैं।
-
app/Helpers/Envato/User.php
: यह हमारी helper फाइल है जो हमारे helper का लॉजिक होल्ड करती है। -
app/Providers/EnvatoServiceProvider.php
: यह एक कस्टम service provider फाइल है जो हमारी कस्टम helper फाइल को लोड करती है। -
Config/app.php
: इस फाइल में, हम अपने कस्टम service provider को घोषित करेंगे, और यह हमारे helper को एक उपनाम को डिफाइन करने में भी मदद करता है ताकि हमें हमारे helper के पूर्णतया योग्य class के नाम का उपयोग न करें। -
routes/web.php
: एक सुंदर स्टैण्डर्ड लैरवेल रूट फ़ाइल जहां हम वास्तव में हमारे helper का परीक्षण करेंगे।
Helper फ़ाइलें बनाएं
यद्यपि आप अपने एप्लीकेशन में कहीं भी अपनी helper फ़ाइलों को रख सकते हैं, अधिक सहज और मानक तरीके से पता चलता है कि इसे आपके app
डायरेक्टरी के अंतर्गत जाना चाहिए।
तो आगे बढ़ो और app
के अंदर एक Helpers/Envato
डायरेक्टरी बनाएं और निम्न content के साथ User.php
फ़ाइल बनाएं। बेशक, आप इसे सीधे app
या app/Helpers
डायरेक्टरी के अंदर रख सकते हैं, लेकिन इस अतिरिक्त लेवल को प्रदान करने से हमें हमारे helpers को अच्छी स्थिति में व्यवस्थित करने की सुविधा मिलती है, विशेष रूप से जब आपके पास ये बहुत सारे हैं।
<?php //app/Helpers/Envato/User.php namespace App\Helpers\Envato; use Illuminate\Support\Facades\DB; class User { /** * @param int $user_id User-id * * @return string */ public static function get_username($user_id) { $user = DB::table('users')->where('userid', $user_id)->first(); return (isset($user->username) ? $user->username : ''); } }
फ़ाइल एक स्टैण्डर्ड नेमस्पेस की डिक्लेरेशन से शुरू होती है:
namespace App\Helpers\Envato;
हमारे कस्टम helper का उद्देश्य एक userid के आधार पर username प्राप्त करना है। इसलिए, हमें डेटाबेस से इंटरैक्ट करने की आवश्यकता है, और इससे हमें DB Facade को शामिल करने के लिए बाध्य किया जा सकता है।
use Illuminate\Support\Facades\DB;
उन लोगों के लिए जो Laravel Facades से परिचित नहीं हैं, यह service कंटेनर में ऑब्जेक्ट तक पहुंचने का एक और सुविधाजनक तरीका है। वैकल्पिक रूप से, आप dependency injection का इस्तेमाल कर सकते थे।
आगे बढ़कर, हमारे helper की ठोस इम्प्लीमेंटेशन आती है। जैसा कि आप देख सकते हैं, एक static method है जो userid के आधार पर username को रिट्रीव करने के लॉजिक को परिभाषित करता है।
$user = DB::table('users')->where('userid', $user_id)->first();
$user
ऑब्जेक्ट मैचिंग userid के साथ डेटाबेस रिकॉर्ड रखता है अंत में, method फॉलोविंग स्टेटमेंट में एक response के रूप में username return करता है।
return (isset($user->username) ? $user->username : '');
हो गया जहाँ तक हमारी helper फ़ाइल का संबंध है।
अब हमने हमारी सहायक फाइल बना ली है, लेकिन सवाल यह है कि आप इसका उपयोग कैसे करेंगे? दो जल्द समाधान मेरे मन में आते हैं:
-
composer.json
में आप हमारी helper फाइलनाम को शामिल कर सकते हैं, ताकि यह auto-loaded हो जाए। फिर, आप सीधे हमारे helper class के static method को कॉल कर सकते हैं। - आप आगे जा सकते हैं और एक Laravel सर्विस प्रोवाइडर बना सकते हैं जो आपको अपनी कस्टम helper फाइल को रजिस्टर करने की अनुमति देता है जिससे कि Laravel फ्रेमवर्क अन्य dependencies के साथ लोड कर सके। उस सर्विस प्रोवाइडर को Laravel कॉन्फ़िगरेशन में रजिस्टर करें और अपने helper का उपयोग करने के लिए एक alias बनाएं।
बेशक, पहला एक बहुत तेज और लागू करने में आसान है, और आप ऐसा करने के लिए परीक्षा ले सकते हैं, लेकिन मैं इसके बाद के एक को सुझाव देना चाहूंगा क्योंकि यह artisian की तरह से अधिक दिखता है और अधिक maintainable है
कमांड लाइन पर जाएं और एक नया service provider बनाने के लिए अपनी एप्लिकेशन रूट में निम्न कमांड चलाएं।
$php artisan make:provider EnvatoServiceProvider Provider created successfully.
आपको उस मैसेज को देखना चाहिए जो यह पुष्टि करता है कि यह app/Providers
डायरेक्टरी के तहत सफलतापूर्वक बनाया गया है।
उस फ़ाइल को खोलें और आपको पहले से ही दो methods दिखेंगे। इस आर्टिकल के कॉन्टेक्स्ट में महत्वपूर्ण register
मेथड है। हां, फिलहाल यह खाली है, तो चलो कुछ स्टफ को इसे अधिक उपयोगी बनाने के लिए फ़ीड करें।
public function register() { require_once app_path() . '/Helpers/Envato/User.php'; }
Register method आपकी dependencies को रजिस्टर करने के लिए उपयोग किया जाता है, और हमने इसे ठीक किया है। हमने हमारे कस्टम helper फाइल को शामिल किया है।
यहां बताया गया है कि app/Providers/EnvatoServiceProvider.php
फ़ाइल को संशोधनों के बाद कैसी दिखेंगी।
<?php // app/Providers/EnvatoServiceProvider.php namespace App\Providers; use Illuminate\Support\ServiceProvider; class EnvatoServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { require_once app_path() . '/Helpers/Envato/User.php'; } }
तो यह सब बहुत अच्छा है अब तक। मेज पर हमारे कस्टम helper और service provider हैं।
इसके बाद, हमें Laravel को हमारे service provider के बारे में सूचित करना होगा ताकि वह bootstrapping के दौरान इसे लोड कर सके। चलो config/app.php
खोलें और अंत में providers
के array में निम्नलिखित एंट्री जोड़ें।
App\Providers\EnvatoServiceProvider::class,
सुविधाजनक तरीके से हमारे helper का उपयोग करने के लिए, हम एक alias भी बना सकते हैं। तो आइए कि एक ही फाइल में अंत में aliases
array में निम्न एंट्री जोड़कर ऐसा करें।
'EnvatoUser' => App\Helpers\Envato\User::class,
इस एंट्री को परिभाषित करके, हम EnvatoUser
keyword का उपयोग करके अपने helper को कॉल कर सकते हैं। बहुत सुविधाजनक है, है ना? आपके रिफरेन्स के लिए, यहां संपूर्ण config/app.php
फ़ाइल है।
<?php // config/app.php return [ /* |-------------------------------------------------------------------------- | Application Name |-------------------------------------------------------------------------- | | This value is the name of your application. This value is used when the | framework needs to place the application's name in a notification or | any other location as required by the application or its packages. */ 'name' => 'Laravel', /* |-------------------------------------------------------------------------- | Application Environment |-------------------------------------------------------------------------- | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various | services your application utilizes. Set this in your ".env" file. | */ 'env' => env('APP_ENV', 'production'), /* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | */ 'debug' => env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ 'url' => env('APP_URL', 'https://localhost'), /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | */ 'timezone' => 'UTC', /* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ 'locale' => 'en', /* |-------------------------------------------------------------------------- | Application Fallback Locale |-------------------------------------------------------------------------- | | The fallback locale determines the locale to use when the current one | is not available. You may change the value to correspond to any of | the language folders that are provided through your application. | */ 'fallback_locale' => 'en', /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | | This key is used by the Illuminate encrypter service and should be set | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | */ 'key' => env('APP_KEY'), 'cipher' => 'AES-256-CBC', /* |-------------------------------------------------------------------------- | Logging Configuration |-------------------------------------------------------------------------- | | Here you may configure the log settings for your application. Out of | the box, Laravel uses the Monolog PHP logging library. This gives | you a variety of powerful log handlers / formatters to utilize. | | Available Settings: "single", "daily", "syslog", "errorlog" | */ 'log' => env('APP_LOG', 'single'), 'log_level' => env('APP_LOG_LEVEL', 'debug'), /* |-------------------------------------------------------------------------- | Autoloaded Service Providers |-------------------------------------------------------------------------- | | The service providers listed here will be automatically loaded on the | request to your application. Feel free to add your own services to | this array to grant expanded functionality to your applications. | */ 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\EnvatoServiceProvider::class, ], /* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | */ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, 'EnvatoUser' => App\Helpers\Envato\User::class, ], ];
हम बस पहुँच गए! हमने यहां आने के लिए सभी कड़ी मेहनत की है, और अब हम अपने कस्टम helper का लाभ उठा सकते हैं।
Action में आपका पहला कस्टम Helper
फिर से, चीजों को सरल और सीधा रखने के लिए, हम मूल Laravel route को परिभाषित करेंगे और वहां से हमारे helper को कॉल करेंगे!
आगे बढ़ो और निम्न कंटेंट्स के साथ एक routes/web.php
फ़ाइल बनाएं।
<?php // routes/web.php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/envato-user-helper-demo', function () { return EnvatoUser::get_username(1); });
क्या किसी भी स्पष्टीकरण की आवश्यकता है? हमने सिर्फ कस्टम helper के shorthand EnvatoUser::get_username
को कॉल किया है, और इसे username return करना चाहिए।
बेशक, आप एप्लीकेशन में कहीं से भी हमारे helper को कॉल कर सकते हैं, यह एक controller या view हो सकता है।
तो आज के लिए हमारी कहानी समाप्त होती है।
निष्कर्ष
Laravel में Helpers वास्तव में एक शक्तिशाली फीचर हैं, और मुझे विश्वास है कि एक डेवलपर के रूप में आप इसे एक्सटेंड करना पसंद करेंगे। और वह आज का विषय था- हमने Laravel helper फ़ाइल संरचना को मूलभूतताओं के माध्यम से जाना और एक उपयोगी कस्टम helper बनाया।
मुझे आशा है कि आपने लेख का आनंद उठाया और यह आपको दिन-प्रतिदिन Laravel एप्लिकेशन के विकास में अपने स्वयं के कस्टम helpers को बनाने में मदद करेगा।
अपनी टिप्पणी और प्रश्नों को नीचे फ़ीड में छोड़ने में संकोच न करें। मैं अपने Twitter पर टिप्पणियों को भी लेता हूं और जैसे ही मैं कर सकता हूं उन्हें जवाब देता हूं!