버전: v2.3.0
다른 프레임워크와의 연동
Medoo는 다른 PHP 프레임워크와도 무리 없이 연동할 수 있습니다. 대부분의 애플리케이션에서는 Medoo를 프레임워크의 서비스 컨테이너나 의존성 주입 컨테이너에 공유 서비스로 등록하는 방식을 권장합니다. 이렇게 하면 불필요한 추가 연결 없이 애플리케이션 전체에서 같은 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);
}
}