IT Italiano
Versione: v2.3.0

Collaborazione con altri framework

Medoo può essere integrato facilmente con altri framework PHP. Nella maggior parte delle applicazioni, l'approccio consigliato consiste nel registrare Medoo come servizio condiviso nel contenitore di servizi del framework o nel contenitore di inserimento delle dipendenze. Ciò consente di riutilizzare la stessa istanza del database in tutta l'applicazione senza creare connessioni aggiuntive non necessarie.
Se il tuo framework fornisce un contenitore integrato o un meccanismo di registrazione del servizio, ti consigliamo di registrare lì Medoo. Per maggiori dettagli, fai riferimento alla documentazione ufficiale del tuo framework per l'integrazione di librerie di terze parti.

Laravel

Nel moderno Laravel (ad esempio Laravel 10/11), l'approccio consigliato è associare Medoo in un fornitore di servizi e risolverlo dal contenitore in base al nome della classe.
Registrazione 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')
			]);
		});
	}
}
Se crei un provider dedicato in Laravel 11, aggiungilo a bootstrap/providers.php.
return [
	App\Providers\AppServiceProvider::class,
	App\Providers\MedooServiceProvider::class,
];
Accesso a Medoo
Dopo la registrazione, risolvi Medoo inserendo il suggerimento in route, controller o servizi.
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 si integra comunemente con PHP-DI tramite php-di/slim-bridge. Registra Medoo nelle definizioni del contenitore e lascia che il bridge crei l'istanza dell'app.
Installazione di PHP-DI
$ composer require slim/psr7 php-di/php-di php-di/slim-bridge
Registrazione 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);
Accesso a 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

In Symfony 6/7, l'approccio consigliato è registrare Medoo come servizio e collegarlo automaticamente ai controller o ai servizi di dominio.
Registrazione Medoo
Aggiungi Medoo al file di configurazione del servizio, ad esempio 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)%'
Accesso a 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 utilizza l'inserimento delle dipendenze tramite file di configurazione. Definire Medoo in DI config e inserirlo in gestori, controller o servizi.
Registrazione Medoo
Definire Medoo nel file di configurazione DI, ad esempio 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'
		]);
	},
];
Accesso a 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

In CodeIgniter 4, il modello consigliato è quello di esporre da Medoo a Config\Services in modo che venga riutilizzata un'istanza condivisa.
Registrazione Medoo
Crea un servizio personalizzato in 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')
		]);
	}
}
Accesso a 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

In Phalcon 5, registra Medoo come servizio condiviso nel contenitore DI e recuperalo in base al nome della classe.
Registrazione 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'
	]);
});
Accesso a 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);
	}
}