با سلام. از وب سایت آموزش برنامه نویسی سورس باران در خدمت شما هستیم با مقاله ساخت دستورات سفارشی Artisan جهت خودکارسازی وظایف در لاراول. فریمورک لاراول دستورات زیادی را به منظور انجام کارهای مختلف دارد، اما هنگامی که برنامه تان رشد کرد و بزرگ شد، اجرای مکرر دستورات لاراول از قبیل ایجاد پایگاه داده، کار با داده ها و.. کار وقت گیر و خسته کننده ای خواهد شد.
ساخت دستورات سفارشی Artisan جهت خودکارسازی وظایف در لاراول
- آموزش نصب لاراول
- آموزش ایجاد دستورات (Command) در لاراول
- ساختار یک دستور درلاراول
- آموزش ثبت دستورات در لاراول
- انجام migrate و ساخت جدول در لاراول
- آموزش تنظیم پایگاه داده در لاراول
- آموزش اجرای دستور در لاراول
در این قسمت قصد داریم دستوری را ایجاد کنیم که با اجرای آن عمل ثبت داده در جدول محصولات به صورت اتوماتیک انجام شود. برخی از دستورات پیش فرض لاراول عبارتند از :
- php artisan serve
- php artisan make:controller
- php artisan make:model –m
- و …
در این مقاله قصد داریم یک دستور سفارشی Artisan برای ثبت داده های محصولات در پایگاه داده ایجاد کنیم. این مقاله نه تنها به شما یاد می دهد که چطور یک دستور سفارشی Artisan ایجاد کنید، بلکه قادر خواهید بود داده ها را از یک فایل csv خوانده، سپس آنها را تجزیه کرده و در نهایت توسط این دستور سفارشی که ایجاد خواهید کرد، آن را در پایگاه داده ذخیره کنید.
نصب لاراول
برای شروع، باید لاراول را نصب کنیم
composer create-project --prefer-dist laravel/laravel command
دستور بالا یک پروژه لاراول به نام Command را ایجاد می کند.
ایجاد دستور در لاراول
در مرحله قبل لاراول را نصب کردیم، حال می خواهیم اولین دستور سفارشی artisan مان را ایجاد کنیم. برای اینکار دستور زیر را در ترمینال وارد کنید.
composer create-project --prefer-dist laravel/laravel command
هدف ما ایجاد کردن یک دستور برای ثبت داده ها در جدول Product است، به همین دلیل نام دستور را productDate می گذاریم. بعد از اجرای دستور فوق، یک کلاس جدید در مسیر app -> console ->Command ایجاد خواهد شد.
فایل app -> console ->commands ->productDate باز کنید، محتوای این فایل مطابق زیر است که احتمالاً قبلاً با آن آشنا بوده اید.
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class productData extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:name'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } }
ساختار یک دستور در لاراول
حال کدهای زیر را برای ایجاد اولین دستور سفارشی در این فایل قرار دهید:
<?php namespace App\Console\Commands; use App\Product; use Illuminate\Console\Command; class productData extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'add:product'; /** * The console command description. * * @var string */ protected $description = 'Add products data to the database'; public function __construct() { ... } public function handle() { // } }
در کد بالا ما نام و امضای دستور به همراه یک توضیح مختصر درباره آن ایجاد کردیم. این آیتم ها هنگام نمایش دستور در لیست دستورات artisan ظاهر خواهد شد.
ثبت دستور در لاراول
کار ما تمام شد، اما این دستوری که ایجاد کردیم هیچ کاربردی ندارد، یعنی لاراول این دستور را نمی شناسد. در قدم بعد باید این دستوری که ایجاد کردیم را به لاراول معرفی کنیم. برای اینکار فایل app ->console ->kernel.php را باز کنید، و کلاس دستوری که ایجاد کردیم را به آرایه $Command اضافه کنید. در زیر نحوه انجام این کار را می بینید:
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ Commands\productData::class, ]; protected function schedule(Schedule $schedule) { ... } protected function commands() { ... } }
حال با موفقیت دستوراتمان را به لاراول معرفی کردیم. برای اینکه مطمئن شویم دستوراتمان در لاراول ثبت شده یا نه، دستور زیر را در ترمینال وارد کنید:
php artisan list
و همان طور که می بینید دستوری که ایجاد کردیم، در لیست دستورات artisan نمایش داده می شود.
به این ترتیب توانستیم اولین دستوراتمان را ایجاد و ثبت کنیم.
انجام migrate و ایجاد جدول
حال برای کاربردی کردن دستور ایجاد شده، قصد داریم یک مدل به همراه فایل migration برای جدول product ایجاد و سپس یک متد برای اجرای دستور ایجاد شده در کنسول تعریف می کنیم. برای ایجاد مدل به همراه فایل migration دستور زیر را در ترمینال بنویسید.
php artisan make:model Product -m
دستور بالا دو فایل را برایمان ایجاد می کند. یکی در مسیر app -> product و دیگری database -> migration ->create_product_table.
و محتوای هر کدام را در زیر می بینید.
## app/Product.php ... class Product extends Model { protected $table = "products"; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'description', 'quantity' ]; }
و
<?php ... class CreateProductsTable extends Migration { public function up() { Schema::create('products', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('description'); $table->string('quantity'); $table->timestamps(); }); } public function down() { ... } }
تنظیم پایگاه داده
فایل .env را باز کرده و قسمت مربوط به پایگاه داده را مطابق زیر تنظیم کنید. قسمت نام پایگاه داده و نام کاربری و … را مطابق با مشخصات پایگاه داده خودتان را تنظیم کنید.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=Your-database-name DB_USERNAME=Your-database-username DB_PASSWORD=Your-database-password
حال با اجرای دستور زیر جدول را در پایگاه داده ایجاد کنید.
php artisan migrate
اجرای دستور
بعد از اینکه دستورمان را اجرا کنیم، متد handle در کلاس productDate فراخوانی می شود. سپس آن را ویرایش کنید و کدهای مربوط به منطق دستور ایجاد شده را به این متد اضافه کنید
<?php ... class productData extends Command { protected $signature = 'add:product'; protected $description = 'Add products data to the database'; public function __construct() { ... } /** * Execute the console command. * * @return mixed */ public function handle() { $CSVFile = public_path('products.csv'); if(!file_exists($CSVFile) || !is_readable($CSVFile)) return false; $header = null; $data = array(); if (($handle = fopen($CSVFile,'r')) !== false){ while (($row = fgetcsv($handle, 1000, ',')) !==false){ if (!$header) $header = $row; else $data[] = array_combine($header, $row); } fclose($handle); } $dataCount = count($data); for ($i = 0; $i < $dataCount; $i ++){ Product::firstOrCreate($data[$i]); } echo "Products data added successfully"."\n"; } }
برای دانلود فایل CSV یی که در این پروژه استفاده می کنیم، اینجا را کلیک کنید. حال باید مطمئن شویم که دستور کار خواهد کرد یا خیر. برای اینکار دستور زیر را در ترمینال وارد کنید.
php artisan add:product
بعد از اجرای دستور بالا باید پیامی تحت عنوان product data added successfully را دریافت کنید. به این ترتیب توانستیم اولین دستور سفارشی مان را با موفقیت طراحی و اجرا کنیم . ساخت دستورات سفارشی کاربردهای زیادی دارد، به عنوان مثال هنگام توسعه یک برنامه در لاراول برای قسمت های تکراری و وقت گیر یک دستور را ایجاد کنید. به این ترتیب هنگام توسعه یک برنامه در لاراول صرفه جویی زیادی در وقت و هزینه شما خواهد شد.
همان طور که در این مقاله دیدید توانستیم صرفاً با اجرای یک دستور، داده های یک فایل CSV را خوانده ودر پایگاه داده ذخیره کردیم. امیدوارم این آموزش برای شما مفید بوده باشد
The post ساخت دستورات سفارشی Artisan جهت خودکارسازی وظایف در لاراول appeared first on آموزش برنامه نویسی.