Versión: v2.3.0
Colaboración con otros marcos
Medoo se puede integrar fácilmente con otros marcos PHP. En la mayoría de las aplicaciones, el enfoque recomendado es registrar Medoo como un servicio compartido en el contenedor de servicios del marco o en el contenedor de inyección de dependencia. Esto permite reutilizar la misma instancia de base de datos en toda la aplicación sin crear conexiones adicionales innecesarias.
Si su marco proporciona un mecanismo de registro de servicio o contenedor integrado, se recomienda registrar Medoo allí. Para obtener más detalles, consulte la documentación oficial de su marco para integrar bibliotecas de terceros.
Laravel
En Laravel moderno (por ejemplo Laravel 10/11), el enfoque recomendado es vincular Medoo en un proveedor de servicios y resolverlo desde el contenedor por nombre de clase.
Registrando 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 crea un proveedor dedicado en Laravel 11, agréguelo a
bootstrap/providers.php.return [ App\Providers\AppServiceProvider::class, App\Providers\MedooServiceProvider::class, ];
Accediendo a Medoo
Después del registro, resuelva Medoo escribiéndolo en rutas, controladores o servicios.
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 comúnmente se integra con PHP-DI a través de
php-di/slim-bridge. Registre Medoo en las definiciones del contenedor y deje que el puente cree la instancia de la aplicación.Instalando PHP-DI
$ composer require slim/psr7 php-di/php-di php-di/slim-bridge
Registrando 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);
Accediendo 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
En Symfony 6/7, el enfoque recomendado es registrar Medoo como servicio y conectarlo automáticamente a controladores o servicios de dominio.
Registrando Medoo
Agregue Medoo a su archivo de configuración de servicio, por ejemplo
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)%'
Accediendo 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 usa inyección de dependencia a través de archivos de configuración. Defina Medoo en la configuración DI e inyéctelo en manejadores, controladores o servicios.
Registrando Medoo
Defina Medoo en su archivo de configuración DI, por ejemplo
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'
]);
},
];
Accediendo 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
En CodeIgniter 4, el patrón recomendado es exponer Medoo a través de
Config\Services para que se reutilice una instancia compartida.Registrando Medoo
Cree un servicio personalizado en
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')
]);
}
}
Accediendo 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
En Phalcon 5, registre Medoo como un servicio compartido en el contenedor DI y recupérelo por nombre de clase.
Registrando 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'
]);
});
Accediendo 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);
}
}