singular / 胶囊
Laravel Eloquent ORM/Capsule 对 Silex 2 的服务提供商
Requires
- php: >=5.5.9
- illuminate/database: ~5.0
- illuminate/events: ~5.0
- pimple/pimple: ~3.0
- silex/silex: ~2.0
This package is not auto-updated.
Last update: 2024-09-15 02:06:21 UTC
README
此服务提供商是 Silex 微框架的服务提供商,它通过 Capsule 集成 Laravel 的 Eloquent ORM,是一个包装器实现。
要求
要使用此服务提供商,您需要使用 PHP 5.4+
安装
要安装服务提供商,请使用 Composer
composer require electrolinux/silex-capsule:2.*
或者,您可以直接在 composer.json 文件中添加它
{
"require": {
"singularphp/silex-capsule": "2.*"
}
}
基本用法
要在您的应用程序中使用它,只需使用 Silex 注册服务提供商
<?php $app = new Silex\Application; $app->register(new Electrolinux\Silex\Provider\CapsuleServiceProvider, [ 'capsule.connection' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'database', 'username' => 'username', 'password' => 'password', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => true, ], ]);
有关可用选项的更多信息,您可以查阅 Capsule 文档。
一旦注册了服务提供商,就会创建一个 Capsule 对象并在调用任何路由之前启动 Eloquent。如果您对技术方面感兴趣,Capsule 作为使用 Application::EARLY_EVENT 的 Silex before 中间件注册,因此只有在您的应用程序执行时才可用,在所有事情发生之前。
如果您需要 Capsule 和 Eloquent 在您的应用程序启动之前(例如在 Symfony 命令行中)初始化,您只需要在依赖注入容器中访问服务
$app['capsule'];
Capsule 默认情况下是全局可用的,允许您像在控制器中一样直接编写查询
use Illuminate\Database\Capsule\Manager as Capsule; $app->get('/book/{id}', function(Application $app, $id) { $book = Capsule::table('books')->where('id', $id)->get(); return $app->json($book); });
如果您不想初始化 Capsule,则将配置 capsule.global 设置为 false。如果您不打算使用 Eloquent 来构建模型,则可以通过将配置 capsule.eloquent 设置为 false 来避免初始化它。
在 Eloquent 中创建模型的方式与在 Laravel 中创建的方式相同
use Illuminate\Database\Eloquent\Model; class Book extends Model { protected $table = 'books'; protected $fillable = [ 'title', 'author', ]; protected $casts = [ 'title' => 'string', 'author' => 'string', ]; // The rest of your model code... }
因此,您可以在控制器中使用它及其所有资源,就像在 Laravel 中一样
$app->get('/books', function(Application $app) { $books = Book::with('tags')->all(); return $app->json($books); }); $app->post('/book', function(Application $app, Request $request) { $book = new Book(); $book->title = $request->request->get('title'); $book->author = $request->request->get('author'); $book->save(); });
高级用法
您可以通过使用 capsule.connections 选项配置多个连接,甚至使用它来缓存;这很简单
<?php $app = new Silex\Application; $app->register(new Electrolinux\Silex\Provider\CapsuleServiceProvider, [ // Connections 'capsule.connections' => [ 'default' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dname1', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => false, ], 'other' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dbname2', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => true, ], ], ]);
如果您启用了连接的查询日志,您可以通过 Capsule 恢复它们
Capsule::connection($name)->getQueryLog();
您还可以使用连接凭据中的 logging 选项通过连接切换日志机制。
您还可以使用 Eloquent 的迁移生成器来构建迁移
$app['capsule']->schema()->create('books', function($table) { $table->increments('id'); $table->string('title'); $table->string('author'); $table->timestamps(); });
默认情况下,服务提供商安装了 Laravel Events 包,因此您也可以使用模型的观察者
<?php class BookObserver { public function saving($model) { // Do something } } Book:observe(new BookObserver());
Capsule 选项示例
以下是一个完整示例,说明您可以传递给服务提供商的所有选项
<?php $app = new Silex\Application; $app->register(new Electrolinux\Silex\Provider\CapsuleServiceProvider, [ // Multiplas conexões 'capsule.connections' => [ 'default' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dname1', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => false, // Desabilita o log para esta conexão ], 'other' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dbname2', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => true, // Habilita o log para esta conexão ], ], /* // Conexão única 'capsule.connection' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dbname', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => true, // Habilita o log para esta conexão ], */ /* // Outras opções 'capsule.global' => true, // Habilita o acesso global ao query builder do Capsule. 'capsule.eloquent' => true, // Automaticamente inicializa o Eloquent ORM. */ ]);
测试
有一些基本的测试来确保 Capsule 对象正确地与 Silex 注册。您可以使用 PHPUnit 执行它们,并且您还需要 SQLite 来进行数据库内存测试。
如果您发起 pull request,请确保添加了相关的测试。