版本: v2.3.0
与其他框架集成
Medoo 可以轻松与其他 PHP 框架集成。在大多数应用中,更推荐的做法是把 Medoo 注册为框架的服务容器或依赖注入容器中的共享服务。这样就能在整个应用中复用同一个数据库实例,而不必额外创建新的连接。
如果你的框架提供了内置容器或服务注册机制,建议直接在那里注册 Medoo。更多细节可以参考框架官方文档中关于第三方库集成的说明。
Laravel
在现代 Laravel(例如 Laravel 10/11)中,推荐的做法是将 Medoo 绑定到服务提供者中,并通过类名从容器中解析。
注册 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。
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/slim-bridge 与 PHP-DI 集成。在容器定义中注册 Medoo,并让桥接器创建应用程序实例。安装 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 注册为服务并将其自动装配到控制器或域服务中。
注册 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 并将其注入到处理程序、控制器或服务中。
注册 Medoo
在 DI 配置文件中定义 Medoo,例如
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 中,推荐的模式是通过
Config\Services 公开 Medoo,以便重用一个共享实例。注册 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);
}
}