چندزبانه‌سازی


مجید مدیر فنی یک استارتآپ است. او در راستای افزایش تعداد مشتریان، می‌خواهد سایت‌شان را چندزبانه کند. او ساختار فایل‌های PO را نمی‌پسندد؛ بنابراین ساختار جدیدی ارائه داده تا با استفاده از آن بتوان سایت را چندزبانه کرد. از شما می‌خواهیم بخش ترجمه‌ی جملات بر اساس ساختاری که مجید ارائه داده است را پیاده‌سازی کنید.

جزئیات پروژه🔗

مجید برای متن ترجمه‌ها، یک آرایه‌ی انجمنی در نظر گرفته که کلیدهای آن، کد زبان‌های مختلف و مقادیر متناظر با آن‌ها، آرایه‌هایی انجمنی شامل نگاشتی از جملات با زبان مبدأ به زبان مقصد هستند. نمونه‌ای از یک آرایه شامل ترجمه‌ها به‌صورت زیر است:

$translations = [
    'fa' => [
        'Hello!' => 'درود!',
        'Hi!' => 'درود!'
    ],
    'fr' => [
        'Hello!' => 'Bonjour!'
    ]
];
PHP

تابعی با نام getTranslation پیاده‌سازی کنید که به ترتیب آرایه‌ی ترجمه‌ها، کد زبان و جمله‌ی ورودی را دریافت کرده و متن ترجمه‌شده را برگرداند. اگر جمله‌ی ورودی در آرایه‌ی ترجمه‌ها موجود نبود، همان متن ورودی را برگردانید.

امضای تابع getTranslation به‌صورت زیر خواهد بود:

function getTranslation($translations, $lang, $statement)
{
    // TODO: Implement
}
PHP

مثال🔗

<?php

function getTranslation($translations, $lang, $statement)
{
    // TODO: Implement
}

$translations = [
    'fa' => [
        'Hello!' => 'درود!',
        'Hi!' => 'درود!'
    ],
    'fr' => [
        'Hello!' => 'Bonjour!'
    ]
];

echo getTranslation($translations, 'fa', 'Hello!');
echo PHP_EOL;
echo getTranslation($translations, 'fr', 'Hello!');
echo PHP_EOL;
echo getTranslation($translations, 'fr', 'Something');
PHP

خروجی مورد انتظار:

درود!
Bonjour!
Something
Plain text

آن‌چه باید آپلود کنید🔗

یک فایل PHP که تابع getTranslation در آن پیاده‌سازی شده است آپلود کنید.

اسمارتیز


نیما در شرکت کدنویس‌گستران شرق به‌جز حسن مشغول به کار است. او فردی مینیمالیست است و از کتاب‌خانه‌های بزرگ و پیچیده‌ی PHP متنفر است. در حال حاضر، تیم کدنویس‌گستران شرق به‌جز حسن از موتور قالب Smarty استفاده می‌کند. این موتور قالب از نظر نیما بسیار بزرگ و پیچیده است. او تصمیم گرفته تا موتور قالب ساده‌ای با نام Smarties بسازد تا در پروژه‌های بعدی‌شان از آن استفاده کنند.

از شما می‌خواهیم Smarties را برای نیما پیاده‌سازی کنید.

جزئیات پروژه🔗

پروژه‌ی اولیه را از این لینک دانلود کنید.

اینترفیس SmartiesFilter🔗

اسمارتیز همانند سایر template engine ها امکان اعمال فیلتر روی مقادیر را داراست. البته، این فیلترها هیچ آرگومانی به‌جز مقدار فعلی ندارد. همه‌ی فیلترهای اسمارتیز اینترفیس SmartiesFilter را پیاده‌سازی می‌کنند. این اینترفیس تنها شامل متدی با نام apply است که متن ورودی را دریافت کرده و پس از اعمال تغییرات، متن نهایی را برمی‌گرداند.

interface SmartiesFilter
{
    public function apply($text);
}
PHP

کلاس SmartiesFilterFactory🔗

وظیفه‌ی این کلاس، تبدیل یک تابع به آبجکتی از SmartiesFilter است. این کلاس شامل متدی static به نام create است که یک تابع را به شکل نام تابع یا anonymous function دریافت کرده و یک آبجکت از نوع SmartiesFilter برمی‌گرداند که عملکرد متد apply آن دقیقاً مطابق با تابع ورودی است.

اگر آرگومان ورودی نامعتبر بود (قابل فراخوانی نبود)، یک InvalidArgumentException با متن پیغام filter must be callable throw کنید.

class SmartiesFilterFactory
{
    public static function create($filter)
    {
        // TODO: Implement
    }
}
PHP

توجه: برای پیاده‌سازی متد create، مجاز به ایجاد کلاس جدید (کلاسی که anonymous نباشد) در برنامه نیستید.

کلاس Smarties🔗

این کلاس، کلاس اصلی اسمارتیز است. این کلاس شامل متدهای زیر است:

  1. متد addFilter($name, $filter): این متد، یک فیلتر با نام $name را به فیلترها اضافه می‌کند. موارد زیر را برای پیاده‌سازی این متد در نظر داشته باشید:
  • اگر فیلتری با این نام از قبل موجود باشد، فیلتر جدید باید جایگزین فیلتر قبلی شود. اگر فیلتر ورودی از نوع SmartiesFilter نباشد، باید یک InvalidArgumentException با متن پیغام filter must implement SmartiesFilter throw کنید.
  • اسمارتیز نباید به کوچکی و بزرگی حروف در نام فیلترها حساس باشد.
  1. متد render($filepath, $parameters): این متد، نام فایل قالب ورودی و آرایه‌ای انجمنی از پارامترها دریافت می‌کند و رشته‌ی خروجی را برمی‌گرداند. موارد زیر را برای پیاده‌سازی این متد در نظر داشته باشید:
  • اگر فایل $filepath موجود نباشد، باید یک Exception با متن پیغام input file not exist throw کنید.
  • اگر پارامتری موجود نباشد، باید یک Exception با متن پیغام parameter "$parameterName" not provided throw کنید ($parameterName نام پارامتر است).
  • اگر فیلتری موجود نباشد، باید یک Exception با متن پیغام filter "$filter" does not exist throw کنید ($filter نام فیلتر است).
  • اسمارتیز نباید به کوچکی و بزرگی حروف در نام پارامترها حساس باشد. تضمین می‌شود که دو پارامتر نظیر a و A به‌صورت هم‌زمان به این متد داده نمی‌شود.

پارامترها در قالب به‌صورت زیر نوشته می‌شوند:

{{ parameter_name }}
Plain text

برای اعمال فیلتر نیز از کاراکتر | استفاده می‌شود. می‌توان یک یا چند فیلتر را بر روی یک پارامتر اعمال کرد:

{{ parameter1|uppercase }}
{{ parameter2|reverse|uppercase }}
Plain text

فیلترها باید به‌ترتیب از چپ به راست روی پارامتر اعمال شوند.

class Smarties
{
    public function addFilter($name, $filter)
    {
        // TODO: Implement
    }

    public function render($filepath, $parameters)
    {
        // TODO: Implement
    }
}
PHP

مثال🔗

با اجرای اسکریپت index.php موجود در پروژه‌ی اولیه، خروجی باید به‌صورت زیر باشد:

<!DOCTYPE html>
<html>
<head>
  <title>sample</title>
</head>
<body>
  <p>WELCOME TO CODECUP!</p>
</body>
</html>
HTML

آن‌چه باید آپلود کنید🔗

فایل‌های Smarties.php و SmartiesFilterFactory را Zip کرده و آپلود کنید.

ورود با موبایل


همان‌طور که می‌دانید، در لاراول عملیات ورود به‌صورت پیش‌فرض توسط ایمیل و رمز عبور انجام می‌شود. در این سؤال شما باید این فرآيند را طوری تغییر دهید که کاربر بتواند علاوه بر ایمیل با شماره موبایل نیز وارد شود.

جزئیات پروژه🔗

در این پروژه از Laravel 8 استفاده شده است.

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها
login_phone
├── app
│   ├── Actions
│   │   ├── Fortify
│   │   │   ├── CreateNewUser.php
│   │   │   ├── PasswordValidationRules.php
│   │   │   ├── ResetUserPassword.php
│   │   │   ├── UpdateUserPassword.php
│   │   │   └── UpdateUserProfileInformation.php
│   │   └── Jetstream
│   │       └── DeleteUser.php
│   ├── Console
│   │   └── Kernel.php
│   ├── Exceptions
│   │   └── Handler.php
│   ├── Http
│   │   ├── Controllers
│   │   │   └── Controller.php
│   │   ├── Middleware
│   │   │   ├── Authenticate.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── PreventRequestsDuringMaintenance.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustHosts.php
│   │   │   ├── TrustProxies.php
│   │   │   └── VerifyCsrfToken.php
│   │   └── Kernel.php
│   ├── Models
│   │   └── User.php
│   ├── Providers
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   ├── BroadcastServiceProvider.php
│   │   ├── EventServiceProvider.php
│   │   ├── FortifyServiceProvider.php
│   │   ├── JetstreamServiceProvider.php
│   │   └── RouteServiceProvider.php
│   └── View
│       └── Components
│           ├── AppLayout.php
│           └── GuestLayout.php
├── bootstrap
│   ├── cache
│   │   ├── .gitignore
│   │   ├── packages.php
│   │   └── services.php
│   └── app.php
├── config
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── fortify.php
│   ├── hashing.php
│   ├── jetstream.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── sanctum.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database
│   ├── factories
│   │   └── UserFactory.php
│   ├── migrations
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php
│   │   ├── 2019_08_19_000000_create_failed_jobs_table.php
│   │   ├── 2019_12_14_000001_create_personal_access_tokens_table.php
│   │   └── 2020_11_17_093623_create_sessions_table.php
│   ├── seeders
│   │   └── DatabaseSeeder.php
│   └── .gitignore
├── public
│   ├── css
│   │   └── app.css
│   ├── js
│   │   └── app.js
│   ├── storage
│   │   └── .gitignore
│   ├── .htaccess
│   ├── favicon.ico
│   ├── index.php
│   ├── mix-manifest.json
│   ├── robots.txt
│   └── web.config
├── resources
│   ├── css
│   │   └── app.css
│   ├── js
│   │   ├── app.js
│   │   └── bootstrap.js
│   ├── lang
│   │   └── en
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   └── views
│       ├── api
│       │   ├── api-token-manager.blade.php
│       │   └── index.blade.php
│       ├── auth
│       │   ├── forgot-password.blade.php
│       │   ├── login.blade.php
│       │   ├── register.blade.php
│       │   ├── reset-password.blade.php
│       │   ├── two-factor-challenge.blade.php
│       │   └── verify-email.blade.php
│       ├── layouts
│       │   ├── app.blade.php
│       │   └── guest.blade.php
│       ├── profile
│       │   ├── delete-user-form.blade.php
│       │   ├── logout-other-browser-sessions-form.blade.php
│       │   ├── show.blade.php
│       │   ├── two-factor-authentication-form.blade.php
│       │   ├── update-password-form.blade.php
│       │   └── update-profile-information-form.blade.php
│       ├── dashboard.blade.php
│       ├── navigation-dropdown.blade.php
│       └── welcome.blade.php
├── routes
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage
│   ├── app
│   │   ├── public
│   │   │   └── .gitignore
│   │   └── .gitignore
│   ├── framework
│   │   ├── cache
│   │   │   ├── data
│   │   │   │   └── .gitignore
│   │   │   └── .gitignore
│   │   ├── sessions
│   │   │   └── .gitignore
│   │   ├── testing
│   │   │   └── .gitignore
│   │   ├── views
│   │   │   └── .gitignore
│   │   └── .gitignore
│   └── logs
│       └── .gitignore
├── tests
│   ├── Feature
│   │   └── ExampleTest.php
│   ├── Unit
│   │   └── ExampleTest.php
│   ├── CreatesApplication.php
│   └── TestCase.php
├── .editorconfig
├── .env
├── .env.example
├── .gitattributes
├── .gitignore
├── .styleci.yml
├── README.md
├── artisan
├── composer.json
├── composer.lock
├── package-lock.json
├── package.json
├── phpunit.xml
├── server.php
├── tailwind.config.js
├── webpack.config.js
└── webpack.mix.js
Plain text
راه‌اندازی پروژه

برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.

  • ابتدا پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • دستور composer install را در پوشه‌ی اصلی پروژه برای نصب نیازمندی‌ها اجرا کنید.

پس از آن، می‌توانید با دستور php artisan migrate مایگریشن‌ها را اجرا کنید.

نکات🔗

  • نام ستونی از جدول users که شماره موبایل در آن ذخیره می‌شود phone است.
  • شماره موبایل و ایمیل هر دو از طریق فیلد email و از طریق متد POST ارسال می‌شوند.
  • شماره موبایل به صورت 09xxxxxxxxx و ایمیل‌ها به فرمت

[ترکیبی از حروف انگلیسی و .]@[وب‌سایت بدون www]

هستند و کاربر با هیچ حالتی غیر از این فرمت‌ها نباید اجازه ورود پیدا کند.

  • شما تنها مجاز به اعمال تغییرات در پوشه‌ی app هستید.

آن‌چه باید آپلود کنید🔗

پس از اعمال تغییرات، کل پروژه به غیر از پوشه‌ی vendor را Zip کرده و آپلود کنید.

توجه کنید که نام فایل Zip اهمیتی ندارد.

دیتابیس JSON


شما در این چالش باید سفری به اعماق لاراول داشته باشید و یک driver جدید برای اتصال به دیتابیس پیاده‌سازی کنید.

دیتابیس با نام quera.json به‌صورت فایل JSON در اختیار شما قرار داده شده است که دارای یک جدول به نام users است. وظیفه‌ی شما در این سؤال این است که اتصالی با این دیتابیس برقرار کنید و اطلاعات داخل جدول users را برگردانید.

محتوای quera.json
{
  "users": [
      {
        "name": "First",      
        "family": "User",
        "username": "quera1",
        "password": "123456789"
      },
      {
        "name": "Second",      
        "family": "User",
        "username": "quera2",
        "password": "123456789"
      },
      {
        "name": "Third",      
        "family": "User",
        "username": "quera3",
        "password": "123456789"
      },
      {
        "name": "Forth",      
        "family": "User",
        "username": "quera4",
        "password": "123456789"
      },
      {
        "name": "Fifth",      
        "family": "User",
        "username": "quera5",
        "password": "123456789"
      },
      {
        "name": "Sixth",      
        "family": "User",
        "username": "quera6",
        "password": "123456789"
      }
  ]
}
JSON

جزئیات پروژه🔗

در این پروژه از Laravel 8 استفاده شده است.

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها
json_database
├── app
│   ├── Console
│   │   └── Kernel.php
│   ├── Exceptions
│   │   └── Handler.php
│   ├── Http
│   │   ├── Controllers
│   │   │   └── Controller.php
│   │   ├── Middleware
│   │   │   ├── Authenticate.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── PreventRequestsDuringMaintenance.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustHosts.php
│   │   │   ├── TrustProxies.php
│   │   │   └── VerifyCsrfToken.php
│   │   └── Kernel.php
│   ├── Models
│   │   └── User.php
│   └── Providers
│       ├── AppServiceProvider.php
│       ├── AuthServiceProvider.php
│       ├── BroadcastServiceProvider.php
│       ├── EventServiceProvider.php
│       └── RouteServiceProvider.php
├── bootstrap
│   ├── cache
│   │   ├── packages.php
│   │   └── services.php
│   └── app.php
├── config
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database
│   ├── factories
│   │   └── UserFactory.php
│   ├── migrations
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   └── 2019_08_19_000000_create_failed_jobs_table.php
│   └── seeders
│       └── DatabaseSeeder.php
├── public
│   ├── favicon.ico
│   ├── index.php
│   ├── robots.txt
│   └── web.config
├── resources
│   ├── css
│   │   └── app.css
│   ├── js
│   │   ├── app.js
│   │   └── bootstrap.js
│   ├── lang
│   │   └── en
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   └── views
│       └── welcome.blade.php
├── routes
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage
│   ├── app
│   │   └── public
│   ├── framework
│   │   ├── cache
│   │   │   └── data
│   │   ├── sessions
│   │   ├── testing
│   │   └── views
│   └── logs
├── tests
│   ├── Feature
│   │   └── ExampleTest.php
│   ├── Unit
│   │   └── ExampleTest.php
│   ├── CreatesApplication.php
│   └── TestCase.php
├── README.md
├── artisan
├── composer.json
├── composer.lock
├── package.json
├── phpunit.xml
├── server.php
└── webpack.mix.js
Plain text
راه‌اندازی پروژه

برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.

  • ابتدا پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • دستور composer install را در پوشه‌ی اصلی پروژه برای نصب نیازمندی‌ها اجرا کنید.

پس از دریافت پروژه، در آدرس database/quera.json دیتابیس را مشاهده خواهید کرد که اگر به فایل config/database.php مراجعه کنید، خواهید دید که connection ای به نام json وجود دارد که اتصال با این دیتابیس را فراهم می‌کند. حال وظیفه شما این است که این connection با درایور json را به هسته‌ی لاراول اضافه کنید.

'json' => [
    'driver' => 'json',
    'ds' => base_path() . '/database/',
    'database' => 'quera.json'
]
PHP
  • دقت کنید که نام connection حتماً باید json باشد.

پس از این که اتصال با دیتابیس را فراهم کردید، باید فقط کوئری select آن را به‌گونه‌ای پیاده‌سازی کنید تا اطلاعات جدول users را برگرداند. برای مثال، در کلاس app/Http/Controllers/HomeController.php دو دستور به صورت زیر نوشته شده است:

public function index()
{
    $users = User::all();
    // $users = DB::table("users")->get();
    return view('index', compact('users'));
}
PHP

این دستورات باید محتوای جدول users را برگردانند.

توجه: نام جدول ورودی مهم نیست و باید همیشه محتوای جدول users برگردانده شود.

آن‌چه باید آپلود کنید🔗

توجه: شما تنها مجاز به اعمال تغییرات در پوشه‌ی app هستید.

پس از اعمال تغییرات، کل پروژه به غیر از پوشه‌ی vendor را Zip کرده و آپلود کنید.

توجه کنید که نام فایل Zip اهمیتی ندارد.

مسیر متفاوت


ابوالفضل در حال کار بر‌ روی پروژه‌ی جدید خود است و در این پروژه باید دائماً حواسش به مسیر‌هایی (routes) که در پروژه استفاده می‌کند باشد. از سوی دیگر، نباید از مسیرهای پیش‌فرضی که لاراول در اختیارش قرار داده است استفاده کند. حال، او از شما کمک خواسته تا در این پروژه به او کمک کنید.

جزئیات پروژه🔗

در این پروژه از Laravel 8 استفاده شده است.

پروژه‌ی اولیه را از این لینک دانلود کنید.

ساختار فایل‌ها
custom_route
├── app
│   ├── Console
│   │   └── Kernel.php
│   ├── Exceptions
│   │   └── Handler.php
│   ├── Http
│   │   ├── Controllers
│   │   │   └── Controller.php
│   │   ├── Middleware
│   │   │   ├── Authenticate.php
│   │   │   ├── EncryptCookies.php
│   │   │   ├── PreventRequestsDuringMaintenance.php
│   │   │   ├── RedirectIfAuthenticated.php
│   │   │   ├── TrimStrings.php
│   │   │   ├── TrustHosts.php
│   │   │   ├── TrustProxies.php
│   │   │   └── VerifyCsrfToken.php
│   │   └── Kernel.php
│   ├── Models
│   │   └── User.php
│   └── Providers
│       ├── AppServiceProvider.php
│       ├── AuthServiceProvider.php
│       ├── BroadcastServiceProvider.php
│       ├── EventServiceProvider.php
│       └── RouteServiceProvider.php
├── bootstrap
│   ├── cache
│   │   ├── packages.php
│   │   └── services.php
│   └── app.php
├── config
│   ├── app.php
│   ├── auth.php
│   ├── broadcasting.php
│   ├── cache.php
│   ├── cors.php
│   ├── database.php
│   ├── filesystems.php
│   ├── hashing.php
│   ├── logging.php
│   ├── mail.php
│   ├── queue.php
│   ├── services.php
│   ├── session.php
│   └── view.php
├── database
│   ├── factories
│   │   └── UserFactory.php
│   ├── migrations
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_resets_table.php
│   │   └── 2019_08_19_000000_create_failed_jobs_table.php
│   └── seeders
│       └── DatabaseSeeder.php
├── public
│   ├── favicon.ico
│   ├── index.php
│   ├── robots.txt
│   └── web.config
├── resources
│   ├── css
│   │   └── app.css
│   ├── js
│   │   ├── app.js
│   │   └── bootstrap.js
│   ├── lang
│   │   └── en
│   │       ├── auth.php
│   │       ├── pagination.php
│   │       ├── passwords.php
│   │       └── validation.php
│   └── views
│       └── welcome.blade.php
├── routes
│   ├── api.php
│   ├── channels.php
│   ├── console.php
│   └── web.php
├── storage
│   ├── app
│   │   └── public
│   ├── framework
│   │   ├── cache
│   │   │   └── data
│   │   ├── sessions
│   │   ├── testing
│   │   └── views
│   └── logs
├── tests
│   ├── Feature
│   │   └── ExampleTest.php
│   ├── Unit
│   │   └── ExampleTest.php
│   ├── CreatesApplication.php
│   └── TestCase.php
├── README.md
├── artisan
├── composer.json
├── composer.lock
├── package.json
├── phpunit.xml
├── server.php
└── webpack.mix.js
Plain text
راه‌اندازی پروژه

برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.

  • ابتدا پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • دستور composer install را در پوشه‌ی اصلی پروژه برای نصب نیازمندی‌ها اجرا کنید.

پس از دریافت پروژه‌ی اولیه، شما باید هسته‌ی لاراول را طوری تغییر دهید تا هر زمان resource controller ای با استفاده از دستور ‍‍make:controller ساخته شد، علاوه بر دارا بودن route های پیش‌فرض خود لاراول، دارای route ای به آدرس /details باشد و هم‌چنین به route پیش‌فرض create آن ‍/new اضافه شود. دقت کنید که آدرس /details پس از فراخوانی باید متد details از همین کلاس را برگرداند.

برای فهم بهتر سؤال، به مثال زیر توجه کنید:

پس از اجرای دستور زیر در کنسول:

php artisan make:controller TagController -r

باید محتوای کلاس TagController شامل موارد زیر باشد:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TagController extends Controller
{
    public function index()
    {
        //    
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        //
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        //
    }

    public function destroy($id)
    {
        //
    }

    public function details()
    { 
        //
    }
}
PHP

هم‌چنین باید دارای route های زیر باشد:

+--------+-----------+-----------------+--------------+--------------------------------------------+------------+
| Domain | Method    | URI             | Name         | Action                                     | Middleware |
+--------+-----------+-----------------+--------------+--------------------------------------------+------------+
|        | GET|HEAD  | tags            | tags.index   | App\Http\Controllers\TagController@index   | web        |
|        | POST      | tags            | tags.store   | App\Http\Controllers\TagController@store   | web        |
|        | GET|HEAD  | tags/create/new | tags.create  | App\Http\Controllers\TagController@create  | web        |
|        | GET|HEAD  | tags/details    | tags.details | App\Http\Controllers\TagController@details | web        |
|        | GET|HEAD  | tags/{tag}      | tags.show    | App\Http\Controllers\TagController@show    | web        |
|        | PUT|PATCH | tags/{tag}      | tags.update  | App\Http\Controllers\TagController@update  | web        |
|        | DELETE    | tags/{tag}      | tags.destroy | App\Http\Controllers\TagController@destroy | web        |
|        | GET|HEAD  | tags/{tag}/edit | tags.edit    | App\Http\Controllers\TagController@edit    | web        |
+--------+-----------+-----------------+--------------+--------------------------------------------+------------+
Plain text

نکات🔗

  • توجه داشته باشید که این فرایند باید برای هر resource controller با هر نامی درست کار کند.
  • شما تنها مجاز به اعمال تغییرات در پوشه‌های app و در صورت لزوم stubs هستید.

آن‌چه باید آپلود کنید🔗

پس از اعمال تغییرات، کل پروژه به غیر از پوشه‌ی vendor را Zip کرده و آپلود کنید.

توجه کنید که نام فایل Zip اهمیتی ندارد.