لینک‌های مفید برای شرکت در مسابقه:

بعد از مسابقه در ساعت ۱۹ امروز وبیناری برای حل بخشی از سوالات مسابقه و پاسخگویی به سوالات شما تدارک دیده‌ایم که می‌توانید از طریق این لینک به رایگان ثبت‌نام نمایید.

در زمان مسابقه می‌توانید سوال‌های خود را از قسمت "سوال بپرسید" مطرح کنید.

مسیر متفاوت


ابوالفضل در حال کار بر‌ روی پروژه‌ی جدید خود است و در این پروژه باید دائماً حواسش به مسیر‌هایی (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 اهمیتی ندارد.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.