ziadoz / silex-capsule
Silex 的 Laravel Eloquent ORM/Capsule 服务提供者
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: 2020-03-06 16:28:53 UTC
README
注意:此存储库不再维护,因为 Silex 已结束,转而使用 Symfony 4 Flex。
这是一个为 Silex 微框架 提供的服务提供者,它通过 Capsule 集成 Laravel 的 Eloquent ORM,这是一个独立的包装实现。
需求
为了使用此服务提供者,您需要运行 PHP 5.5.9+
安装
安装此服务提供者的最佳方式是使用 Composer
composer require ziadoz/silex-capsule:2.*
或者,您可以直接将其添加到您的 composer.json
文件中
{ "require": { "ziadoz/silex-capsule": "2.*" } }
基本用法
要在您的应用程序中使用它,只需将服务提供者与 Silex 注册
<?php $app = new Silex\Application; $app->register(new Ziadoz\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
的 before
中间件注册到 Silex,因此它只能在您的应用程序运行并且发生任何其他事情之前提供一次。
如果您需要在应用程序运行之前启动 Capsule 和 Eloquent(例如在 Symfony Console 命令中),您只需要访问依赖注入容器中的其数组元素
$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 Ziadoz\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 Ziadoz\Silex\Provider\CapsuleServiceProvider, [ // Multiple Connections 'capsule.connections' => [ 'default' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dname1', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => false, // Toggle query logging on this connection. ], 'other' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dbname2', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => true, // Toggle query logging on this connection. ], ], /* // Single Connection 'capsule.connection' => [ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'dbname', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'logging' => true, // Toggle query logging on this connection. ], */ /* // Other Options 'capsule.global' => true, // Enable global access to Capsule query builder. 'capsule.eloquent' => true, // Automatically boot Eloquent ORM. */ ]);
测试
为确保胶囊对象正确注册到Silex,有一些基本测试。您可以使用PHPUnit运行它们,并且还需要SQLite,因为测试使用了简单的内存数据库。
如果您提交pull request,请确保添加相应的测试。