راه اندازی Doctrine ORM در Slim 4

در این پست میخوام که درباره نحوه راه اندازی Doctrine ORM بنویسم، خب اینکه Doctrine چی هستش رو میتونید یه سر به سایتش بزنید. لینک سایت

از اونجایی که نحوه راه اندازی Doctrine بستگی به ساختار پروژه شما داره من تصمیم گرفتم از یه ساختار Slim 4 Skeleton که در دسترس هستش استفاده کنم، به صورت پیشفرض این ساختار از Doctrine استفاده نمیکنه ولی خب ما میخواییم که این کتابخونه رو بهش اضافه کنیم و از امکاناتش استفاده کنیم.

خب برای شروع ابتدا برای خودتون یه پروژه تعریف کنید (قطعا میدونید که باید composer نصب داشته باشید) مثلا من برای خودم یه پروژه به اسم slimdoc تعریف کردم به شکل زیر

composer create-project slim/slim-skeleton slimdoc

به جای slimdoc که در کد بالا نوشتم میتونید اسم پروژه خودتون رو وارد کنید.

بعد از نصب و راه اندازی Slim 4 Skeleton باید Doctrine ORM رو نصب کنیم (داکیومنت Doctrine ORM)، و برای اینکار میتونید از کد زیر استفاده کنید.

composer require doctrine/orm

و یا میتونید داخل composer.json قسمت require خود doctrine/orm رو اضافه کنید به شکل زیر

{
    "require": {
        ...
        "doctrine/orm": "*"
    }
}

بعد از دستور composer install استفاده کنید. (آخرین نسخه stable نصب میشه که در این پست آخرین نسخه 2.8.1 هستش هرچند نخسه 3 هم در حال توسعه است و به زودی نسخه stable اون هم میاد)

خب بریم نحوه کانفیگش رو باهم ببینیم.

فایل dependencies.php رو باز کنید (داخل پوشه app قرار داره) و بعد از LoggerInterface کد زیر رو اضافه کنید.

EntityManagerInterface::class => function (ContainerInterface $ci)  {
            $dSettings = $ci->get('settings')['doctrine'];
           
            $config = Setup::createAnnotationMetadataConfiguration(
                $dSettings['config']['md_dirs'],
                $dSettings['config']['dev_mode']
            );

            return EntityManager::create($dSettings['connection']['mysql'], $config);

        }

میتونید AnnotationDriver یا Filesystemcache رو هم اگه خواستید رو هم در همین قسمت اضافه کنید و یادتون نره کلاسهایی که استفاده میکنید رو هم حتما به اول کدتون اضافه کنید. مثلا برای کد بالا من اول کد کلاس های زیر رو اضافه کردم.

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;

فایل settings.php رو باز کنید این فایل هم داخل پوشه app قرار داره و داخل تنظیمات گزینه های زیر رو هم که مربوط به Doctrine هستش رو اضافه کنید.

'doctrine'=>[
              'config'=>[
                  'dev_mode'           =>  true,
                  'cache_path'        =>  __DIR__ . '/../var/cache/doctrine',
                  'proxy_dir'         =>  null,
                  'annotation_reader' =>  false,
                  'md_dirs'     =>  [__DIR__ . '/../src/Domain'],
              ],
              'connection'=>[
                  'mysql'=>[
                      'driver'    =>  'pdo_mysql',
                      'dbname'  =>  'database',
                      'user'  =>  'root',
                      'password'  =>  'root',
                      'charset'   =>  'utf8',
                      'collation' =>  'utf8_unicode_ci'
                  ],
              ],

          ]

در قسمت کانفیگ با توجه به نوع پروژه خودتون و کانفیگی که میخوایید برای Doctrine انجام بدید میتونید گزینه های زیادی رو اضافه کنید در این قسمت من چندتا گزینه اضافه کردم که ممکنه شما با توجه به نوع پروژه تون بهش نیاز داشته باشید ممکنه نداشته باشید، در اینجا ما در قسمت config از دو گزینه dev_mode و md_dirs استفاده میکنم. و در قسمت connection/mysql هم همینطور اگر فرضا به host و port نیاز داشتید میتونید به همین قسمت اضافه کنید وگرنه میتونید خالی بزارید و به صورت پیشفرض localhost با پورت 3306 در نظر گرفته میشه.

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

./vendor/bin/doctrine

و اینجاست با یه خطای خوشگل مواجه میشید، چون برای راه اندازی doctrine cli tool باید یک کار دیگه هم انجام بدیم. با توجه به داکیومنت doctrine ما نیاز به فایل cli-config.php داریم و البته فراخوانی کلاس ConsoleRunner، میتونید این فایل رو در مسیر اصلی پروژه تون قرار بدید یا یه پوشه دیگه به اسم config درست کنید و این فایل رو داخل اون درست کنید و کد زیر رو بهش اضافه کنید.

<?php
declare(strict_types=1);

use Doctrine\ORM\Tools\Console\ConsoleRunner;
use DI\ContainerBuilder;
use Doctrine\ORM\EntityManagerInterface;

$containerBuilder = new ContainerBuilder();

// Set up settings
$settings = require __DIR__ . '/../app/settings.php';
$settings($containerBuilder);

// Set up dependencies
$dependencies = require __DIR__ . '/../app/dependencies.php';
$dependencies($containerBuilder);

// Build PHP-DI Container instance
$container = $containerBuilder->build();

// Run Console Runner 
return ConsoleRunner::createHelperSet($container->get(EntityManagerInterface::class));

فکر نکنم نیازی به توضیحات دیگه ای باشه ولی الان شما Doctrine ORM رو نصب کردید و میتونید به راحتی از Doctrine Cli هم استفاده کنید. دوباره کد زیر رو اجرا کنید.

./vendor/bin/doctrine

وقتی که لیست دستورات زیر رو دیدید یعنی مشکلی وجود نداره و الان به راحتی میتونید کلاس Entity  خودتون رو ایجاد کنید.

اگه با خطایی مواجه شدید دوباره مراحل رو بررسی کنید، و اگه خطایی که دریافت میکنید درست نشد میتونید اینجا کامنت بزارید و سعی میکنیم با هم حلش کنید.

دیدگاه خود را بنویسید:

آدرس ایمیل شما نمایش داده نخواهد شد.

فوتر سایت

سایدبار کشویی