1402/02/15 5 دقیقه 1089 کلمه

قراردادهای نام‌گذاری در لاراول

لاراول مفاهیم پایه

چگونه باید کنترلرهای خود را نام‌گذاری کنید: مفرد یا جمع؟ با سؤالات این چنینی مشابه، نام‌گذاری مداوم اجزا برای خوانایی کد، انطباق با استانداردها و اجتناب از خطا بسیار مهم و ضروری است. در این آموزش، با قراردادهای مهم در نام‌گذاری اجزای مختلف لاراول و PHP، از جمله Models، Controllers، Blade files، Migrations و غیره آشنا خواهید شد.

naming-conventions-in-laravel

به یاد داشته باشید که بیشتر موارد زیر قوانین سختگیرانه نیستند، می‌توانید هر طور که دوست دارید نام‌گذاری کنید، البته تا زمانی که کار کند. با این وجود، مشکلات نام‌گذاری غیر استاندارد و غیراصولی می تواند موجب بروز موارد زیر شود :

  • در برخی موارد، ممکن است منجر به باگ شود
  • ممکن است نیاز به نوشتن کد اضافی برای عملکرد صحیح داشته باشید.
  • اگر اجزا به طور متناقض نام‌گذاری شوند، توسعه‌دهندگان دیگر به قدرت مغز و صرف زمان بیشتری نیاز دارند تا تصمیم بگیرند که چگونه اجزا را در کد نام‌گذاری کنند.
  • توسعه دهندگان تازه کار در تیم شما ممکن است به زمان بیشتری برای درک کد نیاز داشته باشند.

بنابراین، شما را تشویق می‌کنم که کد خود را تا حد امکان نزدیک به قراردادهای نام‌گذاری استاندارد نگه دارید. در زیر نمونه‌هایی آورده شده است.

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

چگونه Migrations را در لاراول نام گذاری کنیم ؟

صبر کنید، Migrations ؟ من فکر کردم که نباید فایل‌های انتقال را به صورت دستی نام‌گذاری کنیم، زیرا به طور خودکار اتفاق می‌افتد؟

اما این مهم است که دقیقاً چگونه پارامتر را در فرمان php make:migration نامگذاری کنید.

هنگام ایجاد Migration یک فایل xxxx_create_articles_table.php ایجاد می‌کند، و این تصادفی نیست. وقتی می‌خواهید جدول جدیدی ایجاد کنید، برای مثال، دستور باید `php artisan make:migration create_XXXXXX_table باشد. به این ترتیب، لاراول به شما کمک می‌کند یک فایل migration ایجاد کنید، جایی که خط اول به شما می‌گوید جدولی را با نام دقیقی که ارائه کرده‌اید ایجاد کند.

مثال برای php artisan make:migration create_article_reviews_table:

return new class extends Migration
{
    public function up()
    {
        Schema::create('article_reviews', function (Blueprint $table) { 
            $table->id();
            $table->timestamps();
        });
    }
};

و اگر migration شما برای ایجاد یک جدول جدید نیست، بلکه برای اصلاح جدول‌های موجود است، هنگام فراخوانی دستور make:migration به جای شروع با create می‌توانید به عنوان مثال php artisan make:migration modify_whatever_to_article_reviews_table را انجام دهید.

این دستور به جای ایجاد متد Schema::create، متد Schema::table را می سازد و نام جدول را به طور خودکار پر می کند.

return new class extends Migration
{
    public function up()
    {
        Schema::table('article_reviews', function (Blueprint $table) { 
            //
        });
    }
};

چگونه کلید های خارجی را در لاراول نام‌گذاری کنیم ؟

هنگام ایجاد migration برای ستون کلید خارجی، سعی کنید همیشه از نام «model_id» استفاده کنید. به عنوان مثال، اگر مقاله متعلق به یک کاربر است، ستون در جدول «مقاله» باید «user_id» باشد، نه چیزی مانند «article_by_user».

به این ترتیب لاراول به طور خودکار جادوی خود را هنگام تعریف رابطه انجام می دهد و یک ارتباط به ستون ID جدول کاربران اضافه می کند.

return new class extends Migration
{
    public function up()
    {
        Schema::table('articles', function (Blueprint $table) {
            $table->foreignId('user_id')->constrained(); 
        });
    }
};

چگونه مدل ها را در لاراول نام‌گذاری کنیم ؟

قانون سرانگشتی در لاراول این است که از ** شکل مفرد** برای نام مدل‌ها استفاده کنید، مانند «Article» به جای «Articles».

این به این دلیل است که وقتی یک مدل با استفاده از php artisan make:model {Model} ایجاد می‌کنید، لاراول فرض می‌کند که جدول پایگاه داده مربوطه جمع است.

استفاده از کلمات انگلیسی برای نام‌گذاری نیز تشویق می‌شود تا کد برای تمام افراد خوانا شود. همچنین، ممکن است قراردادهای نام‌گذاری را استفاده نکنید. به عنوان مثال، در فارسی، برای مدل «Maghaleh»، لاراول فرض می‌کند که جدول باید «Maghalehs» باشد و در انتهای آن  s قرار می‌دهد. چرا که لاراول پایگاه داده متناظر را جمع فرض می کند. اما در جمع فارسی «Maghalat» است. تصور کنید که یک غیر فارسی زبان آن کلاس را بخواند، برای خواننده کلاس معنی ندارد که چه می‌کند و چیست.

اگر نیاز دارید که یک مدل و یک جدول پایگاه داده را با چند کلمه نام‌گذاری کنید، از PascalCase (به عنوان مثال ArticleReview) استفاده کنید، و لاراول فرض می‌کند که نام جدول به صورت جمع است (مثلاً article_reviews). با این حال، اگر می‌خواهید نام جدول را سفارشی کنید، می‌توانید این کار را در ویژگی protected $table مدل انجام دهید.

class ArticleReview extends Model
{
    protected $table = 'articles_reviews'; 
}

هنگام نوشتن روابط مدل ها از نامگذاری camelCase استفاده کنید، به عنوان مثال publishedLessons و نه published_lessons:

class Article extends Model
{
    public function publishedLessons(): HasMany
    {
        return $this->hasMany(Lesson::class)->published();
    }
}

چگونه کنترلر ها را در لاراول نام‌گذاری کنیم ؟

در حالی که نام کنترلر می‌تواند مفرد یا جمع باشد ( به عنوان مثال «ArticleController» یا «ArticlesController» )، توصیه می‌شود از شکل مفرد استفاده کنید.

وقتی با استفاده از php artisan make:model Article -c مدلی تولید می‌کنید، لاراول به‌طور خودکار یک فرم تکی برای کنترلر تولید می‌کند (مانند ArticleController). هیچ قانون سختگیرانه‌ای در اینجا وجود ندارد، فقط شکلی است که لاراول آن را تولید می‌کند.


چگونه فایل های Blade را نام‌گذاری کنیم ؟

برای فایل‌های Blade، سازماندهی فایل‌ها در زیر پوشه‌ها بر اساس شیء (Model) که با آن کار می‌کنند و اکشن آن‌ها (متد کنترلر متناظر) ضروری است.

  • سازگار: articles/index.blade.php ، articles/show.blade.php و غیره.
  • متناقض: ArticleView.blade.php برای متدshow داخل کنترلر ArticleController

این توصیه از داکیومنت لاراول Resource Controller است: نام متدها باید هم نام فایل‌های Blade باشد. با پیروی از این قرارداد، یافتن فایل‌های مرتبط در صورت نیاز، حتی در پروژه‌های بزرگ‌‌تر آسان‌تر است.


پسوندها یا انتهای نام کلاس‌ها

از انتها یا پسوندهای کلاس برای منعکس کردن هدف کلاس استفاده کنید، مانند «Controller»، «Seeder»، «Factory»، یا «Model» (مثلاً «ArticleController» یا «ArticleSeeder»).

این قرارداد را دنبال کنید تا  فوراً مشخص شود که هر کلاس چه کاری انجام می‌دهد. این کار باعث می‌شود توسعه و فهم کد در آینده راحت باشد.


PSR: Consistency Across Team Members

برای اطمینان از سازگاری بین اعضای تیم و خواندن و نگهداری آسان کدها، از استانداردهای PSR-12 برای PHP استفاده کنید. برخی از نمونه‌استانداردهای کد PSR-12 شامل موارد زیر است :

  • استفاده از فاصله‌ها به جای تب‌ها
  • قراردادهای نام‌گذاری کلاس‌ها
  • استفاده از snake_case در نام‌گذاری توابع

لاراول کد استاندارد PSR-2 را دنبال می‌کند. اگر می‌خواهید از همان استانداردها در کد خود استفاده کنید، ساده‌ترین راه استفاده از پکیج رسمی لاراول Laravel Pint است.

این پکیج بصورت اتوماتیک با مشخص کردن استاندارد موردنظر اقدام به اصلاح تمام کدهای شما خواهد کرد.

با رعایت این استانداردها، خواندن و نگهداری کد آسان‌تر می‌شود، مخصوصاً در پروژه‌های بزرگ‌‌تر که ممکن است چندین عضو تیم روی یک مخزن کد کار کنند. علاوه بر این، ابزارهایی مانند PHPStorm می‌توانند به فرمت خودکار کد برای مطابقت با این استانداردها کمک کنند.


علی مهدوی

علی مهدوی برنامه نویس ارشد وب