VI Tiếng Việt
Phiên bản: v2.3.0

Tích hợp với các framework khác

Medoo có thể tích hợp trơn tru với các framework PHP khác. Trong hầu hết ứng dụng, cách làm được khuyến nghị là đăng ký Medoo như một dịch vụ dùng chung trong bộ chứa dịch vụ hoặc bộ chứa dependency injection của framework. Cách này giúp tái sử dụng cùng một instance Medoo trong toàn bộ ứng dụng mà không tạo thêm các kết nối không cần thiết.
Nếu framework của bạn có sẵn container hoặc cơ chế đăng ký dịch vụ, bạn nên đăng ký Medoo tại đó. Để biết thêm chi tiết, hãy tham khảo tài liệu chính thức của framework về cách tích hợp thư viện bên thứ ba.

Laravel

Trong Laravel hiện đại (ví dụ Laravel 10/11), cách làm được khuyến nghị là đăng ký Medoo trong service provider rồi lấy nó từ container theo tên lớp.
Đăng ký 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')
			]);
		});
	}
}
Nếu bạn tạo nhà cung cấp chuyên dụng trong Laravel 11, hãy thêm nhà cung cấp đó vào bootstrap/providers.php.
return [
	App\Providers\AppServiceProvider::class,
	App\Providers\MedooServiceProvider::class,
];
Truy cập Medoo
Sau khi đăng ký, bạn có thể lấy Medoo bằng cách khai báo kiểu tham số trong route, controller hoặc 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 thường tích hợp với PHP-DI thông qua php-di/slim-bridge. Hãy đăng ký Medoo trong phần định nghĩa container rồi để bridge tạo ứng dụng.
Cài đặt PHP-DI
$ composer require slim/psr7 php-di/php-di php-di/slim-bridge
Đăng ký 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);
Truy cập 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

Trong Symfony 6/7, cách làm được khuyến nghị là đăng ký Medoo như một service rồi để hệ thống tự động đưa nó vào controller hoặc domain service.
Đăng ký Medoo
Thêm Medoo vào tệp cấu hình dịch vụ của bạn, ví dụ 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)%'
Truy cập 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 sử dụng cơ chế dependency injection thông qua tệp cấu hình. Bạn có thể khai báo Medoo trong cấu hình DI rồi đưa nó vào handler, controller hoặc service.
Đăng ký Medoo
Xác định Medoo trong tệp cấu hình DI của bạn, ví dụ 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'
		]);
	},
];
Truy cập 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

Trong CodeIgniter 4, cách làm được khuyến nghị là đăng ký Medoo thông qua Config\Services để có thể tái sử dụng cùng một instance dùng chung.
Đăng ký Medoo
Tạo dịch vụ tùy chỉnh trong 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')
		]);
	}
}
Truy cập 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

Trong Phalcon 5, hãy đăng ký Medoo như một dịch vụ dùng chung trong bộ chứa DI rồi lấy nó theo tên lớp.
Đăng ký 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'
	]);
});
Truy cập 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);
	}
}