gridonic / repository-service-provider
Silex 的 Doctrine 仓库服务提供商
Requires
- php: >=5.3.2
- doctrine/dbal: >=2.1, <=2.4
This package is not auto-updated.
Last update: 2024-09-10 02:44:32 UTC
README
此服务提供商提供了一种简单的方法,用于在 Silex 数据库中拥有仓库。
要求
此服务提供商是为了与 DoctrineServiceProvider
Silex 扩展一起使用而构建的。有关如何使用的说明,请参阅Silex 的 DoctrineServiceProvider 文档。
配置
将仓库添加到您的依赖项中,然后注册自动加载
$app['autoloader']->registerNamespaces(array(
/** Your other namespaces **/
'Knp' => __DIR__.'/../vendor/KnpSilexExtensions/'
));
注册服务提供商
$app->register(
new Knp\Provider\RepositoryServiceProvider(), array(
'repository.repositories' => array(
'projects' => 'MyProject\Repository\Project',
)
)
);
服务提供商期望参数 repository.repositories
被设置,并且是一个以服务名称为键、仓库类为值的关联数组。
在上面的示例中,projects
服务将通过 Pimple(即,您可以通过 $app['projects']
访问它)使用 MyProject\Repository\Project
类公开。
用法
如您现在所猜测的,您需要为每个想使用的仓库实现一个具体类。该仓库必须扩展 Knp\Repository
并实现 getTableName
方法,该方法应返回绑定到该仓库的数据库表名。
在上面的示例中,假设您的项目存储在 project
表中,则 MyProject\Repository\Project
类将如下所示
<?php
namespace MyProject\Repository;
use Knp\Repository;
class Project extends Repository;
{
public function getTableName()
{
return 'project';
}
}
默认仓库实现公开了一些用于操作数据库的方法,这些方法基本上是 Doctrine\DBAL\Connection
中方法的代理
insert(array $data)
$app['projects']->insert(array(
'title' => 'foo',
'description' => 'A project'
));
将在表中有 title
"foo" 和 description
"A project" 的项目中插入。
update(array $data, array $identifier)
$app['projects']->update(array('title' => 'bar'), array('title' => 'foo'));
将更新所有项目的 title
从 "foo" 更改为 "bar"。
delete(array $identifier)
$app['projects']->delete(array('title' => 'bar'));
将更新所有标题为 "bar" 的项目。
find($id)
$app['projects']->find(42);
返回主键为 42 的项目。
findAll()
$app['projects']->findAll();
返回整个表的内容。
扩展仓库
扩展仓库就像向其中添加方法一样简单。例如,您可以向其中添加一个 findByTitle($title)
方法,以便根据标题返回所有项目
public function findByTitle($title)
{
return $this->db->fetchAll('SELECT * FROM project WHERE title = ?', array($title));
}
鸣谢
- KnpLabs 提供原始代码
- Joshua Morse 提供初始代码提取