Version: v2.3.0
Zusammenarbeit mit anderen Frameworks
Medoo lässt sich problemlos in andere PHP-Frameworks integrieren. In den meisten Anwendungen besteht der empfohlene Ansatz darin, Medoo als gemeinsam genutzten Dienst im Service-Container oder Dependency-Injection-Container des Frameworks zu registrieren. Dadurch kann dieselbe Datenbankinstanz in der gesamten Anwendung wiederverwendet werden, ohne dass unnötige zusätzliche Verbindungen entstehen.
Wenn Ihr Framework einen integrierten Container oder Mechanismus zur Dienstregistrierung bereitstellt, empfiehlt es sich, Medoo dort zu registrieren. Weitere Einzelheiten finden Sie in der offiziellen Dokumentation Ihres Frameworks zur Integration von Bibliotheken von Drittanbietern.
Laravel
Im modernen Laravel (z. B. Laravel 10/11) besteht der empfohlene Ansatz darin, Medoo in einen Dienstanbieter zu binden und ihn anhand des Klassennamens aus dem Container aufzulösen.
Registrierung 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')
]);
});
}
}
Wenn Sie in Laravel 11 einen dedizierten Anbieter erstellen, fügen Sie ihn zu
bootstrap/providers.php hinzu.return [ App\Providers\AppServiceProvider::class, App\Providers\MedooServiceProvider::class, ];
Zugriff auf Medoo
Lösen Sie nach der Registrierung Medoo auf, indem Sie es in Routen, Controllern oder Diensten eingeben.
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 wird üblicherweise über
php-di/slim-bridge mit PHP-DI integriert. Registrieren Sie Medoo in den Containerdefinitionen und lassen Sie die Bridge die App-Instanz erstellen.Installation von PHP-DI
$ composer require slim/psr7 php-di/php-di php-di/slim-bridge
Registrierung 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);
Zugriff auf 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 besteht der empfohlene Ansatz darin, Medoo als Dienst zu registrieren und ihn automatisch mit Controllern oder Domänendiensten zu verbinden.
Registrierung Medoo
Fügen Sie Medoo zu Ihrer Dienstkonfigurationsdatei hinzu, zum Beispiel
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)%'
Zugriff auf 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 nutzt die Abhängigkeitsinjektion über Konfigurationsdateien. Definieren Sie Medoo in der DI-Konfiguration und fügen Sie es in Handler, Controller oder Dienste ein.
Registrierung Medoo
Definieren Sie Medoo in Ihrer DI-Konfigurationsdatei, zum Beispiel
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'
]);
},
];
Zugriff auf 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 besteht das empfohlene Muster darin, Medoo bis
Config\Services verfügbar zu machen, sodass eine gemeinsam genutzte Instanz wiederverwendet wird.Registrierung Medoo
Erstellen Sie einen benutzerdefinierten Dienst 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')
]);
}
}
Zugriff auf 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
Registrieren Sie in Phalcon 5 Medoo als gemeinsam genutzten Dienst im DI-Container und rufen Sie ihn nach Klassennamen ab.
Registrierung 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'
]);
});
Zugriff auf 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);
}
}