FR Français
Version: v2.3.0

Intégration avec d'autres frameworks

Medoo peut s’intégrer facilement à d’autres frameworks PHP. Dans la plupart des applications, l’approche recommandée consiste à enregistrer Medoo comme service partagé dans le conteneur de services ou d’injection de dépendances du framework. Cela permet de réutiliser la même instance de base de données dans toute l’application sans créer de connexions supplémentaires inutiles.
Si votre framework fournit un conteneur intégré ou un mécanisme d’enregistrement des services, il est préférable d’y enregistrer Medoo. Pour plus de détails, consultez la documentation officielle de votre framework sur l’intégration de bibliothèques tierces.

Laravel

Dans Laravel moderne (par exemple Laravel 10/11), l'approche recommandée consiste à lier Medoo dans un fournisseur de services et à le résoudre à partir du conteneur par nom de classe.
Enregistrer 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')
			]);
		});
	}
}
Si vous créez un fournisseur dédié dans Laravel 11, ajoutez-le à bootstrap/providers.php.
return [
	App\Providers\AppServiceProvider::class,
	App\Providers\MedooServiceProvider::class,
];
Accéder à Medoo
Après l’enregistrement, récupérez Medoo via l’injection de type dans vos routes, contrôleurs ou services.
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 s'intègre généralement à PHP-DI via php-di/slim-bridge. Enregistrez Medoo dans les définitions du conteneur et laissez le pont créer l'instance d'application.
Installer PHP-DI
$ composer require slim/psr7 php-di/php-di php-di/slim-bridge
Enregistrer 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);
Accéder à 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

Dans Symfony 6/7, l'approche recommandée consiste à enregistrer Medoo en tant que service et à le connecter automatiquement aux contrôleurs ou aux services de domaine.
Enregistrer Medoo
Ajoutez Medoo à votre fichier de configuration de service, par exemple 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)%'
Accéder à 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 utilise l'injection de dépendances via des fichiers de configuration. Définissez Medoo dans la configuration DI et injectez-le dans des gestionnaires, des contrôleurs ou des services.
Enregistrer Medoo
Définissez Medoo dans votre fichier de configuration DI, par exemple 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'
		]);
	},
];
Accéder à 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

Dans CodeIgniter 4, le modèle recommandé consiste à exposer Medoo via Config\Services afin qu'une instance partagée soit réutilisée.
Enregistrer Medoo
Créez un service personnalisé dans 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')
		]);
	}
}
Accéder à 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

Dans Phalcon 5, enregistrez Medoo en tant que service partagé dans le conteneur DI et récupérez-le par nom de classe.
Enregistrer 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'
	]);
});
Accéder à 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);
	}
}