TH ไทย
เวอร์ชัน: v2.3.0

การทำงานร่วมกับเฟรมเวิร์กอื่น

Medoo สามารถนำไปใช้ร่วมกับเฟรมเวิร์ก PHP อื่น ๆ ได้ไม่ยาก ในแอปพลิเคชันส่วนใหญ่ แนวทางที่แนะนำคือการลงทะเบียน Medoo เป็นบริการแบบใช้ร่วมกันไว้ในคอนเทนเนอร์บริการหรือคอนเทนเนอร์ DI ของเฟรมเวิร์ก เพื่อให้ใช้อินสแตนซ์ฐานข้อมูลเดิมซ้ำได้ทั่วทั้งแอปพลิเคชัน โดยไม่ต้องสร้างการเชื่อมต่อเพิ่มโดยไม่จำเป็น
หากเฟรมเวิร์กของคุณมีคอนเทนเนอร์หรือกลไกลงทะเบียนบริการในตัว แนะนำให้ลงทะเบียน Medoo ไว้ที่จุดนั้น สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารทางการของเฟรมเวิร์กแต่ละตัวเกี่ยวกับการผสานไลบรารีจากภายนอก

Laravel

ใน Laravel รุ่นปัจจุบัน เช่น Laravel 10/11 แนวทางที่แนะนำคือผูก Medoo ไว้ใน service provider แล้วดึงออกมาจากคอนเทนเนอร์ตามชื่อคลาส
การลงทะเบียน Medoo
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Medoo\Medoo;

class MedooServiceProvider extends ServiceProvider
{
	public function register(): void
	{
		$this->app->singleton(Medoo::class, function () {
			return new Medoo([
				'type' => 'mysql',
				'host' => config('database.connections.mysql.host'),
				'database' => config('database.connections.mysql.database'),
				'username' => config('database.connections.mysql.username'),
				'password' => config('database.connections.mysql.password')
			]);
		});
	}
}
หากคุณสร้างผู้ให้บริการเฉพาะใน Laravel 11 ให้เพิ่มไปที่ bootstrap/providers.php
return [
	App\Providers\AppServiceProvider::class,
	App\Providers\MedooServiceProvider::class,
];
การเรียกใช้ Medoo
หลังจากลงทะเบียนแล้ว คุณสามารถเรียกใช้ Medoo ได้โดยระบุชนิดพารามิเตอร์ไว้ใน route, controller หรือ service
use Illuminate\Support\Facades\Route;
use Medoo\Medoo;

Route::get('/', function () {
	$data = app(Medoo::class)->select('account', ['id', 'name']);
	return response()->json($data);
});

Route::get('/typed', function (Medoo $database) {
	$data = $database->select('account', ['id', 'name']);
	return response()->json($data);
});

Slim

Slim 4 มักใช้งานร่วมกับ PHP-DI ผ่าน php-di/slim-bridge ให้ลงทะเบียน Medoo ไว้ในค่ากำหนดของคอนเทนเนอร์ แล้วให้ bridge สร้างอินสแตนซ์ของแอป
การติดตั้ง PHP-DI
$ composer require slim/psr7 php-di/php-di php-di/slim-bridge
การลงทะเบียน Medoo
use DI\Bridge\Slim\Bridge;
use DI\ContainerBuilder;
use Medoo\Medoo;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;

require __DIR__ . '/vendor/autoload.php';

$builder = new ContainerBuilder();

$builder->addDefinitions([
	Medoo::class => function () {
		return new Medoo([
			'type' => 'mysql',
			'host' => 'localhost',
			'database' => 'name',
			'username' => 'your_username',
			'password' => 'your_password'
		]);
	}
]);

$container = $builder->build();

$app = Bridge::create($container);
การเรียกใช้ Medoo
use DI\Container;

$app->get('/', function (Request $request, Response $response) use ($container) {
	/** @var Container $container */
	$data = $container->get(Medoo::class)->select('account', ['id', 'name']);
	$response->getBody()->write(json_encode($data));

	return $response->withHeader('Content-Type', 'application/json');
});

$app->run();

Symfony

ใน Symfony 6/7 แนวทางที่แนะนำคือการลงทะเบียน Medoo เป็น service แล้วให้ระบบส่งเข้า controller หรือ service ภายในโดเมนโดยอัตโนมัติ
การลงทะเบียน Medoo
เพิ่ม Medoo ลงในไฟล์การกำหนดค่าบริการของคุณ เช่น config/services.yaml
services:
    Medoo\Medoo:
        arguments:
            -
                type: 'mysql'
                host: '%env(resolve:DB_HOST)%'
                database: '%env(resolve:DB_NAME)%'
                username: '%env(resolve:DB_USER)%'
                password: '%env(resolve:DB_PASS)%'
การเรียกใช้ Medoo
namespace App\Controller;

use Medoo\Medoo;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;

class HomeController
{
	private Medoo $database;

	public function __construct(Medoo $database)
	{
		$this->database = $database;
	}

	#[Route('/', name: 'home')]
	public function index(): JsonResponse
	{
		$data = $this->database->select('account', ['id', 'name']);

		return new JsonResponse($data);
	}
}

Yii 3

Yii 3 ใช้กลไก DI ผ่านไฟล์ตั้งค่า กำหนด Medoo ไว้ในไฟล์กำหนดค่า DI แล้วส่งเข้า handler, controller หรือ service
การลงทะเบียน Medoo
กำหนด Medoo ในไฟล์กำหนดค่า DI ของคุณ เช่น config/common/di.php
use Medoo\Medoo;

return [
	Medoo::class => static function () {
		return new Medoo([
			'type' => 'mysql',
			'host' => getenv('DB_HOST') ?: 'localhost',
			'database' => getenv('DB_NAME') ?: 'name',
			'username' => getenv('DB_USER') ?: 'your_username',
			'password' => getenv('DB_PASS') ?: 'your_password'
		]);
	},
];
การเรียกใช้ Medoo
use Medoo\Medoo;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

final class SiteController
{
	private Medoo $database;

	public function __construct(Medoo $database)
	{
		$this->database = $database;
	}

	public function index(
		ServerRequestInterface $request,
		ResponseInterface $response
	): ResponseInterface {

		$data = $this->database->select('account', ['id', 'name']);
		$response->getBody()->write(json_encode($data));

		return $response;
	}
}

CodeIgniter 4

ใน CodeIgniter 4 แนวทางที่แนะนำคือเปิดเผย Medoo ผ่าน Config\Services เพื่อให้สามารถใช้อินสแตนซ์ร่วมกันตัวเดิมซ้ำได้
การลงทะเบียน Medoo
สร้างบริการที่กำหนดเองใน app/Config/Services.php
namespace Config;

use CodeIgniter\Config\BaseService;
use Medoo\Medoo;

class Services extends BaseService
{
	public static function medoo(bool $getShared = true)
	{
		if ($getShared) {
			return static::getSharedInstance('medoo');
		}

		return new Medoo([
			'type' => 'mysql',
			'host' => env('database.default.hostname', 'localhost'),
			'database' => env('database.default.database', 'name'),
			'username' => env('database.default.username', 'your_username'),
			'password' => env('database.default.password', 'your_password')
		]);
	}
}
การเรียกใช้ Medoo
namespace App\Controllers;

class Home extends BaseController
{
	public function index()
	{
		$database = service('medoo');
		$data = $database->select('account', ['id', 'name']);

		return $this->response->setJSON($data);
	}
}

Phalcon

ใน Phalcon 5 ให้ลงทะเบียน Medoo เป็นบริการแบบใช้ร่วมกันในคอนเทนเนอร์ DI แล้วดึงมาใช้ด้วยชื่อคลาส
การลงทะเบียน Medoo
use Medoo\Medoo;
use Phalcon\Di\Di;

$di = new Di();

$di->setShared(Medoo::class, function () {
	return new Medoo([
		'type' => 'mysql',
		'host' => 'localhost',
		'database' => 'name',
		'username' => 'your_username',
		'password' => 'your_password'
	]);
});
การเรียกใช้ Medoo
use Phalcon\Mvc\Controller;

class IndexController extends Controller
{
	public function indexAction()
	{
		$data = $this->di->getShared(Medoo::class)->select('account', ['id', 'name']);
		return json_encode($data);
	}
}