<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های رضا جمال زاده</title>
        <link>https://virgool.io/feed/@rezajamalzadeh</link>
        <description>web developer</description>
        <language>fa</language>
        <pubDate>2026-04-14 18:37:22</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1061779/avatar/ypHwFY.jpeg?height=120&amp;width=120</url>
            <title>رضا جمال زاده</title>
            <link>https://virgool.io/@rezajamalzadeh</link>
        </image>

                    <item>
                <title>اصلاح متون در لاراول با پکیج Laravel Prose Linter</title>
                <link>https://virgool.io/@rezajamalzadeh/laravel-prose-linter-cujjgrlsoiig</link>
                <description>فریمورک لاراول دارای پکیج‌های فراوانی است. یکی از این پکیج‌های کاربردی و جالب که به تازگی منتشر شده است و در این مقاله قصد معرفی آن را داریم، پکیج Laravel Prose Linter می‌باشد. ما با استفاده از این پکیج می‌توانیم به سادگی به اصلاح و ویرایش متون خود بپردازیم.در توضیحات این پکیج آمده است:پکیج Laravel Prose Linter به شما کمک می‌کند تا متن‌های نوشته شده در برنامه‌ی لاراولی خود را جلا ببخشید(به بهترین شکل ممکن در آورید). این پکیج blade template‌ها و ترجمه‌های شما را برای یافتن اشتباه تایپی بررسی می‌کند و پیشنهاداتی با توجه به سبک نویسندگی شما برای بهبود نوشته ارائه می‌دهد.پکیج Prose Linter از Vale که یکی از پکیج‌ها زبان Golang است، استفاده می‌کند. vale یک ابزار خط فرمان محور است که که به بررسی و اصلاح متون می‌پردازد. پکیج Vale به خودی خود یا پکیج بسیار ارزشمند است که  Prose Linter از آن استفاده می‌کند تا به ما یک ابزار خط فرمان محور(CLI) برای بررسی و اصلاح متون موجود در برنامه لاراولی بدهد.نمونه:در ادامه دستورات ارائه شده توسط Laravel Prose Linter را مشاهده می‌کنید:# Lint blade templates
php artisan lint:blade

# Lint a single blade template
php artisan lint:blade auth.login

# Lint translations
php artisan lint:translation

# Lint specific translation namespace(s)
php artisan lint:translation auth validationاین پکیج همچنین دارای تنظیماتی برای شخصی‌سازی استایل‌های خود می‌باشد که با مراجعه به فایل config/linter.php می‌توانید آن‌ها را تغییر دهید.use Beyondcode\LaravelProseLinter\Styles\WriteGood;
use Beyondcode\LaravelProseLinter\Styles\Vale;
/*
 * Customize the Vale styles used by the linter.
*/
return [
       &#039;styles&#039; =&gt; [
                 WriteGood::class,
                  Vale::class
    ]
]; همانطور که  در کد بالا مشاهده می‌کنید، پکیج Prose Linter دارای دو استایل write-good وvaleبه صورت پیش‌فرض می‌باشد.برای کسب اطلاعات بیشتر در مورد این استایل‌ها به مستندات Vale Styles مراجعه کنید.برای مشاهده‌ی نحوه نصب و استفاده از این پیکیج می‌توانید به صفحه مستندات آن را مراجعه کنید. لازم به ذکر است نصب و استفاده از Prose Linter بسیار ساده و راحت می‌باشد.در صورتی که شما پکیج‌های جذاب دیگری برای لاراول می‌شناسید، خوشحال می‌شویم آن‌ها را در بخش نظرات به دیگر مخاطبان معرفی کنید.منبع</description>
                <category>رضا جمال زاده</category>
                <author>رضا جمال زاده</author>
                <pubDate>Wed, 28 Jul 2021 05:11:02 +0430</pubDate>
            </item>
                    <item>
                <title>هشت ترفند Timestamps در لاراول</title>
                <link>https://virgool.io/@rezajamalzadeh/laravel-timestamps-tricks-iwbtntskxisb</link>
                <description> Timestampsاگر شما هم از جمله برنامه نویسانی هستید که از فریمورک لاراول برای توسعه نرم افزار خود استفاده می‌کنید، به احتمال زیاد با timestampها در لاراول آشنایی دارید.به طور پیش‌ فرض، در جداول Eloquent model لاراول دو ستون create_at و update_at وجود دارد که به آن‌ها timestamps می‌گویند.برای timestamp‌s ترفندهای زیادی وجود دارد که با استفاده از آن‌ها می‌توانیم به شخصی سازی timestamps در نرم افزار خود بپردازیم و کار‌ها جالبی با آنان انجام دهیم.۱-غیرفعال سازی Timestampsدر بعضی مواقع بنابر شرایطی مانند: افزایش سرعت دیتابیس،کاهش حجم اطاعات،عدم نیاز جدول به این فیلد‌ها، دریافت ارور‌های SQL و... نیاز می‌شود تا برنامه نویس timestamps را غیرفعال کند. برای غیرفعال کردن timstamps در لاراول، ابتدا به مدل مورد نظر خود بروید و سپس ویژگی زیر را مطابق کد وارد کنید:class Role extends Model
{
    public $timestamps = FALSE;
    // ... other model properties and methods
}۲-تغییر نام ستون‌های Timstampsاگر شما مجبور باشید بر روی دیتابیسی به غیر از دیتابیس خود لاراول کار کنید و جداول آن دیتابیس از قبل دارای ستون‌ها create_at و update_at باشند، در این صورت برای حل مشکل تشابه چه کاری باید انجام دهید؟ برای حل این مشکل می‌توانید به سادگی وارد مدل خود شوید و نام ستون‌های timestamps را تغییر دهید.class Role extends Model
{
    const CREATED_AT = &#039;create_time&#039;;
    const UPDATED_AT = &#039;update_time&#039;;۳-تغییر فرمت تاریخ/زمان Timestampsتا قبل از انتشار لاراول 7، فرمت زمانی timestamps به این صورت: 20:01:00 12-02-2019 بود. پس از انتشار ورژن ۷ لاراول، این فرمت به صورت زیر درآمد:2019-12-02T20:01:00.283041Zدر صورتی که شما بنابر هر شرایطی نیاز دارید تا این فرمت را شخصی‌سازی کنید، باید ویژگی dateFormat$ را در مدل مورد نظر خود تنظیم کنید. این ویژگی نحوی ذخیری داده‌های زمانی در دیتابیس و همچنین فرمت آنان را مشخص می‌کند:class Flight extends Model
{
/**
* The storage format of the model&#039;s date columns.
*
* @var string
 */
protected $dateFormat = &#039;U&#039;;
}۴-در رابطه‌ی Many-to-Many:جدول pivotبرای جدول pivot در رابطه‌ی Many-to-Many کمی تفاوت وجود دارد و به صورت پیش‌فرض لاراول ستون‌های timestamps را برای جدول pivot قرار نمی دهد.اما گاهی اوقات نیاز است تا برای این جدول، timestamps را فعال کنیم. به عنوان مثل شما دارای دو مدل user و roles هستید و می‌خواید رابطه‌ی Many-to-Many برای آن‌ها ایجاد کنید. بنابراین کدی مانند کد زیر را می‌نویسید:class User extends Model
{
 public function roles()
    {
        return $this-&gt;belongsToMany(Role::class);
    }
}همانطور که گفته شد، لاراول به صورت پیش‌فرض برای جدول pivot ستون‌ها Timestamps در نظز نمی‌گیرد. برای فعال‌سازی این ستون‌ها کافی است تا کد بالا را مانند نمونه‌ی زیر تغییر دهید:public function roles()
{
    return $this-&gt;belongsToMany(Role::class)-&gt;withTimestamps();
}۵-مرتب سازی داده‌ها با استفاده از Timestampsدو میانبر برای مرتب سازی داده‌ها با استفاده از timestamps وجود دارد. به جای:User::orderBy(&#039;created_at&#039;, &#039;desc&#039;)-&gt;get();می‌نویسیم:User::latest()-&gt;get();همچنین یک متد مخالف ()latest (جدیدترین) به نام ()older (قدیمی‌ترین) به صورت زیر وجود دارد:User::oldest()-&gt;get();هر دوی این متدها برای مرتب سازی از create_at استفاده می‌کنند.همچنین شما می‌توانید ستون دیگری برای مرتب سازی اطلاعات انتخاب کنید. برای مثال، اگر می‌خواهید از ستون update_at برای مرتب سازی استفاده کنید. باید از کد زیر استفاده کنید:$lastUpdatedUser = User::newest(&#039;updated_at&#039;)-&gt;first();۶-آپدیت کردن داده‌ها بدون تغییر ستون update_atهنگامی که شما یک رکورد در دیتابیس را آپدیت می‌کنید، ستون update_at به صورت خودکار آپدیت می‌شود و این یکی از مزایای لاراول به شمار می‌رود. اما گاهی اوقات شرایطی پیش می‌آید که شما نیاز دارید تا یکی از داده‌های یک رکورد را آپدیت کنید بدونه آن‌که بخواهید تغییری در update_at آن رکورد ایجاد شود. برای این کار مانند نمونه‌ی زیر شما باید timestamps را فقط برای آن رکورد غیرفعال کنید:$user = User::find(1);
$user-&gt;profile_views_count = 123;
$user-&gt;timestamps = false;
$user-&gt;save();۷-متد Touch and Parent Touchبرخالف آخرین مثال، شاید شما نیاز داشته باشید تا بدون ایجاد تغییر در داده‌های رکورد، تنها ستون update_at آن را بروز رسانی کنید.بنابراین می‌توانیدبه جای:$user-&gt;update([&#039;updated_at&#039; =&gt; now()]);از کد زیر استفاده کنید:$user-&gt;touch();مورد دیگر، گاهی اوقات شما می‌خواید که در زمان تغییر update_at یک رکورد، این مورد برای والد آن رکورد که با آن رکورد دارای رابطه است، نیز تغییر کند. به عنوان مثال، اگر تعدادی کامنت برای یک پست وجود داشته باشد و آن کامنت‌ها آپدیت شوند، update_at علاوه بر خود کامنت‌ها برای والد آن‌ها یعنی پست نیز آپدیت شود.برای این کار باید به مدل کامنت رفته و کدهای زیر را به آن اضافه کنیم:class Comment extends Model 
   {
    protected $touches = [&#039;post&#039;];

    public function post()
    {
        return $this-&gt;belongsTo(&#039;Post&#039;);
    }
}۸-فیلدهای Timestamp به صورت خودکار بر اساس Carbon هستندآخرین مورد بیشتر یک یادآوری است تا یک ترفند، اما همه کسانی که از لاراول استفاده می‌کنند باید آن را بدانند.به صورت پیش‌‌فرض، create_at و update_at بر اساس پکیج Carbon هستند. بنابراین شما می‌توانید عملیات‌های مختلف carbon را بدون تبدیل آنان به نمونه‌ی carbon انجام دهید. برای مثال:$user-&gt;created_at-&gt;addDays(3);
now()-&gt;diffInDays($user-&gt;updated_at);نتیجه‌گیریدر این مقاله سعی شد تا ترفندهای کوچک اما مفید در مورد Timestamps در لاراول برای شما توصیف شود. امیدوارم از این نکات در نرم افزارهای لاراولی خود استفاده کنید.اگر شما ترفند دیگری در مورد Timestamps در لاراول می‌شناسید، خوشحال می‌شویم در بخش نظرات با دیگر مخاطبان در میان بگذارد.منبع</description>
                <category>رضا جمال زاده</category>
                <author>رضا جمال زاده</author>
                <pubDate>Tue, 27 Jul 2021 04:03:26 +0430</pubDate>
            </item>
                    <item>
                <title>نگاهی به ویژگی‌های جدید لاراول 9</title>
                <link>https://virgool.io/laravel-community/what-is-coming-laravel-in-9-yxvfyacqiz3n</link>
                <description>لاراول 9لاراول یکی از فریمورک‌های محبوب زبان برنامه نویسی php می‌باشد. که در سال‌های اخیر طرفداران زیادی در بین توسعه دهندگان اپلیکیشن‌های وب پیدا کرده‌است. تا کنون ۸ ورژن از این فریمورک ارائه شده که هر کدام دارای ویژگی‌های جدید و تغییراتی می‌باشد. ورژن ۹ لاراول نسخه LTS (نسخه‌‌ای با پشتیبانی طولانی مدت) خواهد بود. این ورژن در اوایل سال ۲۰۲۲ میلادی (دی ماه ۱۴۰۰) عرضه خواهد شد. در این مقاله ما سعی داریم تا تمام ویژگی‌های جدید و تغییراتی که تاکنون اعلام شده است را معرفی کنید.تاریخ انتشار ورژن ۹ لاراولدر ابتدا زمان عرضه ورژن ۹ لاراول در حدود سپتامبر سال جاری (شهریور ۱۴۰۰) برنامه‌ریزی شده بود. اما در نهایت تیم لاراول تصمیم گرفت تا ورژن جدید را در ژانویه ۲۰۲۲ (دی ماه ۱۴۰۰) عرضه کند در توضیحات این جا به جایی آمده است:لاراول از پکیج‌های مختلفی که در فریم‌ورک Symfony موجود می‌باشند، برای برخی ویژگی‌ها، استفاده می‌کند. ورژن 6.0 سیمفونی در ماه نوامبر سال جاری منتشر می‌شود، بنابراین ما تصمیم گرفتیم تا انتشار نسخه جدید لاراول را تا ژانویه ۲۰۲۲ به تأخیر بیندازیم. با این تاخیر در انتشار ما می‌توانیم از ویژگی‌های جدید ورژن ۶ سیمفونی استفاده کنیم بدون آن که نیاز به آپدیت دوباره فریمورک لاراول برای استفاده از این ویژگی‌ها داشته باشیم. بهتر است که انتشار ورژن‌های سالانه‌ی خود را همیشه ۲ ماه پس از عرضه فریمورک سیمفونی انجام دهیم.این تصمیم باعث انتشار ورژن‌های جدید لاراول در زمانبندی بهتری می‌شود.برنامه ریزی انتشار ورژن‌های بعدی: Laravel 9: January 2022 Laravel 10: January 2023 Laravel 11: January 2024نسخه ۸ پی اچ پی حداقل نسخه در لاراول ۹از آنجا که نسخه جدید لاراول از سیمفونی ورژن ۶ استفاده می‌کند. همچنین فریمورک سیمفونی ورژن ۶ برای اجرا به ۸ php نیاز دارد، بنابراین حداقل ورژن php برای اجرا لاراول 9، نسخه ۸ آن می‌باشد.ویژگی Anonymous Stub Migrationsدر اوایل سال جاری میلادی، نسخه 8.37 لاراول با ویژگی جدیدی به نامAnonymous Migrations انتشار یافت. این ویژگی از برخورد نام ‌کلاس‌های migration با هم جلوگیری می‌کند. در توضیح مختصر این ویژگی می‌توان بیان کرد که این خصوصیت از برخورد و اشتباه شدن migrationهایی که نام کلاس خیلی مشابه‌ی دارند جلوگیری می‌کند. use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration 
{
/**
 * Run the migrations.
*
 * @return void
  */
public function up()
{
 Schema::table(&#039;people&#039;, function (Blueprint $table) {
$table-&gt;string(&#039;first_name&#039;)-&gt;nullable();
});
) 
};زمانی که لاراول 9 عرضه شود این ویژگی به صورت پیش فرض در آن قرار خواهد داشت و با اجرای فرمان php artisan make:migration نمایش داده می‌شود.رابط کاربری جدید برای Query Builderبه لطف Chris Morrell، یکی از ویژگی‌های لاراول ۹ اینترفیس جدید Query Builder می‌باشد. در صفحه گیت هاب merged PR شما می‌توانید اطلاعات جامعی از جزئیات این ویژگی را دریافت کنید. در توضیحات این ویژگی به طور خلاصه آمده است:برای توسعه دهندگان که به تجزیه و تحلیل، refactoring و تکمیل کد در IDE وابسته هستند، فقدان  یک رابط کاربری مشترک یا وراثت بین Query\Builder ،Eloquent\Builder و Eloquent\Relation می‌تواند مشکل ساز باشدreturn Model::query()
-&gt;whereNotExists(function($query) {
// $query is a Query\Builder
})
 -&gt;whereHas(&#039;relation&#039;, function($query) {
 // $query is an Eloquent\Builder
 })
-&gt;with(&#039;relation&#039;, function($query) {
// $query is an Eloquent\Relation
 });این ویژگی یک اینترفیس جدید Illuminate\Contracts\Database\QueryBuilder و یک Illuminate\Database\Eloquent\Concerns\DecoratesQueryBuilder را اضافه کرده است.توابع جدید برای رشته‌هااز آنجا که پی اچ پی ۸ حداقل ورژن می‌باشد، Tom Schlick استفاده از توابعstr_contains() str_starts_with() و()str_ends_withیعنی توابعی که در کلاس \Illuminate\Support\Str وجود دارند را تایید کرده است.از SwiftMailer تا Symfony Mailerفریمورک سیمفونی، پکیج SwiftMailer را منسوخ کرده است. لاراول ۹ تغییراتی در استفاده از Symfony Mailer برای ارسال و دریافت ایمیل‌ها ایجاد می‌کند. این امر باعث ایجاد چند تغییر ناگهانی می‌شود. مراجعه به صفحه‌ی گیت هاب PR می‌توانید جزئیات بیشتری از این تغییرات را مشاهده کنید. با انتشار نسخه‌ی پایداری از لاراول ۹، راهنمای استفاده و نحوی کارکرد مدل جدید ارسال و دریافت ایمیل منتشر می‌شود.قابلیت حذف فایل server.phpیک ویژگی جزئی است، اما شما می توانید فایل server.php را از پروژه خود حذف کنید. فایل server.php در داخل فریمورک قرار خواهد گرفت. این فایل فقط برای سرویس php artisan serve استفاده می‌شود.در صورت علاقه به این فریمورک محبوب این پست را ذخیر کرده تا به سرعت از ویژگی‌ها جدید لاراول ۹ مطلع شوید.منبع</description>
                <category>رضا جمال زاده</category>
                <author>رضا جمال زاده</author>
                <pubDate>Fri, 23 Jul 2021 17:09:55 +0430</pubDate>
            </item>
                    <item>
                <title>زمانبندی کارها در لاراول با استفاده از Cron Job</title>
                <link>https://virgool.io/@rezajamalzadeh/learning-cron-job-in-laravel-hbh5rov95las</link>
                <description>زمانبندی کارها در لاراولدر برخی اپلیکیشن‌ها کارهایی وجود دارد که باید به صورت دوره‌ای در زمانبندی مناسب بر روی سرور انجام شوند. از جمله این کارها می‌توان به ارسال ایمیل‌های تبلیغاتی، بهینه‌سازی دیتابیس، پشتیبان گیری از داده‌های موجود در اپلیکیشن، ایجاد گزارش ترافیک اپلیکیشن و... اشاره کرد. برای خودکارسازی این کارها وجود یک سیستم زمانبندی ضروری است. سیستم Cron Job، زمانبندی کارها در لاراول را به صورت بسیار ساده  و زیبایی انجام می‌دهد.برای این‌که به اهمیت زمانبندی کارها در اپلیکیشن‌ها پی ببرید، فرض کنید، شما دارای یک اپلیکیشن برای اعلام روزانه قیمت دلار هستید و می‌خواهید قیمت دلار را هر روز در یک ساعت مشخص برای کاربران ویژه خود پیامک کنید. در این صورت انجام دستی این کار به صورت روزانه باعث هدر رفتن وقت و هزینه شما می‌شود. بنابراین وجود یک سیستم برای انجام خودکار این کارها در زمان مشخص بسیار لازم است.شما با مطالعه این مقاله می‌توانید با چگونگی زمانبندی کارها در لاراول آشنا شوید و ضمن یادگیری یک تکنیک فوق العاده برای زمانبندی کارها در برنامه‌های لاراولی از اتلاف وقت و هزینه اضافی جلوگیری کنید.کرون(Cron) چیست؟ کرون(Cron)، یک سیستم‌ زمانبندی کار مبتنی بر تعیین زمان در سیستم عامل یونیکس/لینوکس است. این سیستم دستورات را در یک بازه زمانی از پیش تعیین شده اجرا می‌کند. Cron از یک فایل برای کانفیگ به نام Corn table که به عنوان جدول کرون نیز شناخته می‌شود، برای مدیریت فرآیند برنامه‌ریزی کارها استفاده می‌کند. Corn table یا جدول کرون دارای تمامی Cron‌های مرتبط به یک کار خاص است. cron job از دو قسمت، عبارت cron  و یک دستور خط فرمانی که باید اجرا شود تشکیل شده است.* * * * * command/to/runدر عبارت cron  بالا، (*****) هر فیلد یک گزینه برای مشخص کردن توالی زمانبندی کار است. این گزینه‌ها به ترتیب نمایانگر دقیقه، ساعت، روز، ماه و روزهای هفته هستند. علامت ستاره به معنی تمام مقادیر ممکن است. بنابراین دستور بالا در هر دقیقه اجرا می‌شود. به عنوان مثال cron job زیر در ۶:۲۰ دهم هر ماه اجرا می‌شود:6 20 10 * * command/to/runلاراول  Cron Jobیک سیستم مدیریت کار داخلی در لاراول است که به برنامه‌ها قابلیت اجرای وظایف خاصی مانند ارسال نوتیفیکیشن یا حذف کاربران غیر فعال در یک دوره زمانی مشخص را می‌دهد. شما برای اجرای Cron Job به سیستم عامل لینوکس در سرور خود احتیاج خواهید داشت. در ضمن، برای فهم بهتر این آموزش از قبل باید با زبان php و فریمورک لاراول آشنایی داشته باشید.ایجاد یک پروژه جدیددر این مقاله ما می‌خواهیم یک اپلیکیشن ساده لاراولی ایجاد کنیم تا زمانبندی کارها در لاراول را به شما نشان دهیم. ابتدا با استفاده از دستور زیر یک پروژه جدید ایجاد می‌کنیم:composer create-project --prefer-dist laravel/laravel cronایجاد کار زمانبندی شده در لاراولروش‌های مختلفی وجود دارد که با استفاده از آن‌ها می‌توانید کارهای زمانبندی شده‌ی خود را در لاراول ایجاد کنید. در ادامه به توضیح هر یک از این روش‌ها می‌پردازیم تا بفهمیم هر کدام چگونه در لاراول پیاده سازی می‌شوند.ایجاد یک دستور آرتیسان جدیدوارد پروژه خود شوید و دستور زیر را برای ایجاد یک کلاس آریسان جدید اجرا کنید:php artisan make:command WordOfTheDayدستور بالا یک فایل command  جدید به نام WordOfTheDay.php در دایرکتوری app/Console/Commands ایجاد خواهد کرد و اگر فایل را باز کنید کد‌های زیر را مشاهده می‌کنید:&lt;?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class WordOfTheDay extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = &#039;command:name&#039;;
/**
* The console command description.
*
* @var string
*/
protected $description = &#039;Command description&#039;;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
}
}در کد بالا خط زیر حاوی نام و امضای command استprotected $signature = &#039;command:name&#039;;کلمه  command:name با word:day جایگزین کنید. این همان چیزی است که در زمان اجرای فرمان برای انجام دادن کار انجام می دهیم:protected $signature = &#039;word:day&#039;;همانطور که مشاهده کردید، کد بالا دارای خصوصیت(property) description  است. در اینجا شما برای این ویژگی، توصیفی واقعی و دقیق از کاری که این فرمان انجام می‌دهد را می‌بینید. description  در زمانی که دستور  Artisan list اجرا می‌شود به همراه امضا نمایش داده می‌شود. برای مثال description  فرمان را به صورت زیر تغییر دهید:‍‍‍‍‍‍‍protected $description = &#039;Send a Daily email to all users with a word and its meaning&#039;;هر زمانی که فرمان اجرا شود متد handle فراخوانی می‌شود. در این متد کد انجام یک کار خاص را قرار می‌دهیم. فایل  WordOfTheDay.php با متد handle و دیگر تغییرات انجام شده به شکل زیر خواهد بود:&lt;?php
namespace App\Console\Commands;
use App\User;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
class WordOfTheDay extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = &#039;word:day&#039;;
/**
* The console command description.
*
* @var string
*/
protected $description = &#039;Send a Daily email to all users with a word and its meaning&#039;;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$words = [
&#039;aberration&#039; =&gt; &#039;a state or condition markedly different from the norm&#039;,
&#039;convivial&#039; =&gt; &#039;occupied with or fond of the pleasures of good company&#039;,
&#039;diaphanous&#039; =&gt; &#039;so thin as to transmit light&#039;,
&#039;elegy&#039; =&gt; &#039;a mournful poem; a lament for the dead&#039;,
&#039;ostensible&#039; =&gt; &#039;appearing as such but not necessarily so&#039;
];
// Finding a random word
$key = array_rand($words);
$value = $words[$key];
$users = User::all();
foreach ($users as $user) {
Mail::raw(&amp;quot{$key} -&gt; {$value}&amp;quot, function ($mail) use ($user) {
$mail-&gt;from(&#039;info@tutsforweb.com&#039;);
$mail-&gt;to($user-&gt;email)
-&gt;subject(&#039;Word of the Day&#039;);
});
}
$this-&gt;info(&#039;Word of the Day sent to All Users&#039;);
}
}قطعه کد بالا یک کلمه تصادفی را از آرایه انتخاب کرده و آن را به ایمیل تمامی کاربران ارسال خواهد کردثبت فرمانحالا که فرمان را ایجاد کردیم، باید آن را در  kernel ثبت کنیم. به فایل pp/Console/Kernel.php مراجع کنید:&lt;?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 = [
//
];
/**
* Define the application&#039;s command schedule.
*
* @param  \Illuminate\Console\Scheduling\Schedule  $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule-&gt;command(&#039;inspire&#039;)
//          -&gt;hourly();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this-&gt;load(__DIR__.&#039;/Commands&#039;);
require base_path(&#039;routes/console.php&#039;);
}}در این فایل کلاس فرمان ایجاد شده را در ویژگی commands ثبت کرده و فرمان‌ها را زمانبندی می‌کنیم تا در زمان‌های از پیش تعیین شده در متد schedule اجرا شوند. در اینجا می‌توانیم تمام cron jobها در لاراول را مدیریت کنیم.این فایل را مانند نمونه زیر تغییر دهید. در این فایل ما به سادگی کلاس WordOfTheDay  را به ویژگی commands  اضافه کردیم و آن را به صورتی زمانبندی می‌کنیم تا هر روز اجرا شود:&lt;?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\WordOfTheDay::class,
];
/**
* Define the application&#039;s command schedule.
*
* @param  \Illuminate\Console\Scheduling\Schedule  $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule-&gt;command(&#039;word:day&#039;)
-&gt;daily();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this-&gt;load(__DIR__.&#039;/Commands&#039;);
require base_path(&#039;routes/console.php&#039;);
}}در ادامه اگر فرمان php artisan list را در ترمینال اجرا کنید، خواهید دید که فرمان جدید ثبت شده است. در تصویر زیر می‌توانید نام فرمان به همراه امضا و توصیف آن را مشاهده کنید:توجه داشته باشید که تنظیمات دیتابیس با مشخصات ایمیل در فایل .env قرار دارد پس باید مطمئن شوید که تعدادی کاربر با ایمیل مشخص در دیتابیس موجود می‌باشد. این فرمان را در ترمینال اجرا کنید:php artisan word:dayفرمان گفت امضا اجرا خواهد شد که در protected $signature = &#x27;command:name&#x27; قرار گرفته است همچنین می‌توانید این پیام را هم در ترمینال مشاهده کنید:استفاده از متد Closure/Callback برای زمانبندی کارها در لاراولسیستم زمانبندی کارها در لاراول به شما امکان اجرای متد callback یا closure را به‌صورت دوره‌ای با استفاده از متد call می‌دهد. در ادامه می خواهیم آن را در متد schedule از  app/Console/Kernel.php اضافه کنیم. در اینجا محتوای کلاس را با متد schedule مشاهده می‌کنید:&lt;?php
namespace App\Console;
use App\User;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application&#039;s command schedule.
*
* @param  \Illuminate\Console\Scheduling\Schedule  $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule-&gt;call(function () {
User::where(&#039;spam_count&#039;, &#039;&gt;&#039;, 100)
-&gt;get()
-&gt;each
-&gt;delete();
})-&gt;hourly();
}
}در کد بالا ما closure  را به عنوان اولین پارامتر به متد callاضافه کردیم و زمان اجرای کار را به صورت ساعتی تنظیم کرده‌ایم. تا در هر ساعت اجرا شود در متد callکاربران spam  با عدد بیشتر از ۱۰۰ را حذف می‌کنیم.زمانبندی دستورات به روش (Exec Command)لاراول به شما این امان را می‌دهد تا دستورات خط فرمان را هم زمانبندی کنید. به این ترتیب می‌توانید فرمان‌هایی(cammandها) به سیستم عامل ویا اپلیکیشن‌های خارجی صادر کنید. ما از متد exec برای اجرای یک دستور خط فرمان استفاده می‌کنیم. در ادامه، یک نمونه‌ی ساده را مشاهد می‌کنید که به شما امکان پشتیبانی گرفتن از کد‌های خود را به صورت ماهانه می‌دهد:&lt;?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Define the application&#039;s command schedule.
*
* @param  \Illuminate\Console\Scheduling\Schedule  $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule-&gt;exec&#40;
&#039;cp -r &#039; . base_path(&#41; . &amp;quot &amp;quot . base_path(&#039;../backups/&#039; . date(&#039;jY&#039;))
)-&gt;monthly();
}
}متد exec  ، فرمانی که به عنوان اولین آرگومان اضافه کردیم را اجرا خواهد کرد. در کد بالا این متد پروژه لاراولی شما را در پوشه‌ی backup کپی می‌کند. پس از پوشه backup ،روز و سال(نمایش به صورت عددی) قرار می‌گیرد. همچنین شما می‌توانید Jobs های لاراول را در سیستم زمانبندی کارها به همان طریقی زمان‌بندی کنید که فرمان های آرتیسان و closures را زمانبندی کردیم.در ادامه می‌خواهیم نگاهی عمیق‌تر به سیستم زمانبندی کارها در لاراول داشته باشیم.سیستم Task Scheduler در لاراولسیستم Task Scheduler یا زمانبندی کار در لاراول دستورات خط فرمان آرتیسان، shell و یا یک callback  را به صورت دوره‌ای در یک زمان مشخص اجرا می‌کند. برای انجام این کار تنها کافی است از متد schedule موجود در app/Console/Kernel.php استفاده کنیم.protected function schedule(Schedule $schedule)
{
$schedule-&gt;command(&#039;word:day&#039;)
-&gt;daily();
}قسمت schedule-&gt;command(&#x27;word:day&#x27;)$ جایی است که ما تعیین می‌کنیم کدام فرمان باید اجرا شود و ;daily()&lt;- توالی اجرا را مشخص می‌کند. بازه‌های زمانی طولانی‌تر هم می‌توان تعیین کرد. شما می‌توانید ;daily()&lt;- را با یکی از گزینه‌های لیست زیر جایگزین کنید:هر کار را هر دقیقه اجرا می‌کند                           ;everyMinute()&lt;-هر کار را هر پنج دقیقه اجرا می‌کند                     ;everyFiveMinutes()&lt;-هر کار را هر ساعت اجرا می‌کند                           ;hourly()&lt;-هر کار را در هر ساعت در دقیقه هفدهم اجرا می‌کند      ;hourlyAt(17)&lt;-جهت مشاهده لیست کامل دستورات می‌توانید از مستندات وبسایت لاراول استفاده کنید.شروع به کار سیستم زمانبندی لاراولمی‌خواهیم  Cron Jobs را طوری تنظیم کنیم تا به صورت خودکار با اجرای فرمان شروع به کار کند. برای راه اندازی سیستم زمانبندی خود، تنها باید یک Cron job را اضافه کنیم که در هر دقیقه اجرا شود. برای این کار به ترمینال سرور خود بروید و سپس در پروژه خود cd کرده و فرمان زیر را اجرا کنید:crontab -eاین فرمان فایل Crontab سرور را باز می‌کند. کد زیر را در فایل قرار داده، ذخیره کرده و سپس خارج شوید.* * * * * cd /path-to-your-project &amp;&amp; php artisan schedule:run &gt;&gt; /dev/null 2&gt;&amp;1فراموش نکنید که /path/to/artisan را با مسیر کامل آرتیسان اپلیکیشن لاراولی خود جایگزین کنید.نتیجه گیرییکی از مهم‌ترین مزایای سیستم زمانبندی کارها در لاراول این است که ما می‌توانیم با خیال راحت روی ایجاد دستورات و نوشتن منطقی کدها تمرکز کنید و در همان زمان لاراول بقیه کارها را به صورت خودکار انجام می‌دهد.در صورتی که تجربه استفاده از زمانبندی کارها در لاراول را دارید خوشحال می‌شویم تا تجربیات خود را در قسمت نظرات با دیگر مخاطبان در میان بگذارید.منبع</description>
                <category>رضا جمال زاده</category>
                <author>رضا جمال زاده</author>
                <pubDate>Thu, 22 Jul 2021 23:32:49 +0430</pubDate>
            </item>
            </channel>
</rss>