عنوان مقاله :

آموزش ساخت دستور سفارشی artisan در لاراول

گردآوری و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 22 شهریور 1396
دسته بندی ها : لاراول

لاراول به همراه تعدادی دستور artisan آمده که ما در بخش های مختلف پروژه ازشون استفاده می کنیم. بعضی از اونها معمول ترند مثل make:controller برای ساخت کنترلر و make:model برای ساخت یک مدل و خیلی ها مثل این. اما ممکنه شما به دستورات بیشتری نیاز داشته باشید که باعث صرفه جویی در وقتتون می شوند.

این آموزش بر اساس ورژن 5.2 لاراول هست.

در معماری MVC ممکنه فعالیت های بیشتری از دریافت یک درخواست ساده, ساخت عملیات های دیتابیس و پاس دادن نتایج به view , وجود داشته باشد. این یعنی ممکنه اونها قواعد پیچیده تری باشند که نتوانند در مدل شامل شوند. بنابراین کاری که ما انجام می دهیم ساخت یک پوشه Services و نگه داری از تمام قواعد پیچیده در اونجا, برای ماژول های مختلفمون هست.

ساخت یک دستور کنسول

php artisan make:console Service

ما از دستور artisan بالا برای ساخت یک دستور Service جدید استفاده می کنیم. این یک فایل Service.php در مسیر app/Console/Commands خواهد ساخت, به همراه تعدادی محتوای پیشفرض است که ما باید با توجه به نیازمون اونها رو تغییر بدهیم.

تنظیم امضا و توضیحات دستور

protected $signature = 'make:service {file}';

protected $description = 'Create a new service class';

امضای دستور درواقع چیزی هست که کاربر باید تایپ کنه, مثل make:model و توضیحات یک دستور وظیفه ی دستور رو بیان می کنه. امضای بالا یک argument اجباری به نام file داره که کاربر باید پاس بده. در این مورد این نام فایل و نام کلاس خواهد شد. اگر اون پاس داده نشه پیام خطای زیر نمایش داده خواهد شد :

Not enough arguments (missing: "file").

آگاه کردن Artisan درباره ی دستور جدید

در مسیر app/Console یک فایل بنام Kernel.php وجود دارد. ما باید کلاس مون رو به آرایه ی commands$ اضافه کنیم, پس باید جیزی شبیه زیر بشه :

protected $commands = [

Commands\Service::class,

];

حالا اگر به ترمینال بروید و دستور php artisan رو بزنید شما دستور جدید رو زیر make پیدا می کنید :

make:service   Create a new service class

پس ما دستور جدید رو اضافه کردیم و حالا وظیفه ی دستور رو تعریف می کنیم. از اونجا که ما یک مسیر و یک فایل داخلش می سازیم, باید File رو در فایل Service.php وارد کنیم :

use File;

تابع handle وقتی اجرا میشه که فردی دستور جدید رو اجرا کنه. اول از همه ما چک می کنیم که مسیر وجود داره یا خیر. اگر نه ما اون رو می سازیم. 

$file_path = app_path('Services');

if (!File::exists($file_path)) {

File::makeDirectory($file_path);

}

کد بالا یک مسیر Services داخل مسیر app میسازه, البته اگر وجود نداشته باشه. حالا ما argument دستور رو که توسط کاربر پاس داده شده می گیریم و اسم فایل و کلاس رو تنظیم می کنیم. ما همچنین محتوای فایل رو که شامل namespace و نام کلاس هست وارد می کنیم :

// Set the file name and content

$file_name = $this->argument('file') . '.php';

$file_content = "<?php" . "\n" . "namespace App\Services;" . "\n\n" . "class " . $this->argument('file') . "\n" .

"{}";


// Create the file with content in the above directory

File::put($file_path . '/' . $file_name, $file_content);

حالا به کاربر پیامی رو نشون میدیم که شامل نتیجه عملیات هست :

// Show message to the user

$this->info('Service file ' . $file_name . ' created successfully in ' . $file_path);

حالا کار ساخت دستور تمام شد به ترمینال رفته و دستور زیر اجرا کنید :

php artisan make:service BusinessService

مشاهده خواهید کرد فایل BusinessService.php در مسیر app/Services ساخته میشود.

منبع

مقالات پیشنهادی

مقدمه‌ای بر استفاده از Vue.js در لاراول

در این مقاله میخوایم یک پروژه تستی بسازیم و در اون بتونیم یکسری اطلاعات رو به دیتابیس بفرستیم یا از دیتابیس حذف کنیم. این کار معمولی هست اما ما میخوای...

چرا لاراول بهترین فریمورک 2017 است ؟

با تعداد زیاد فریمورک های موجود برای PHP این میتونه گیج‌کننده باشه که بهترین رو انتخاب کنید, مخصوصاً وقتی که بخواید یک اپلیکیشن وب فوق‌العاده برای کسب...

استفاده از REST API وردپرس در فریمورک لاراول

ورژن 4.7 وردپرس که جدیداً منتشر شده قابلیت فوق‌العاده‌ای به نام REST API اضافه کرده که قبلاً فقط با استفاده از پلاگین های خارجی ممکن بود. بنابراین ما...

یه لقمه نون و لاراول

در این مقاله کوتاه میخواهم در مورد برخی از موضوعاتی در لاراول صحبت کنم که واقعا کسانی که خواهان کار با لاراول هستند باید این موارد را بدانند . بارها و...

دیدگاه های ارزشمند شما

برای ارسال نظر لازم است ابتدا وارد سایت شوید
هیچ دیدگاهی تا به این لحظه برای این موضوع ثبت نشده است