knplabs / repository-service-provider
为Silex的Doctrine仓库服务提供商
Requires
- php: >=5.3.2
- doctrine/dbal: >=2.1, <2.3
This package is not auto-updated.
Last update: 2022-10-01 03:29:35 UTC
README
遗憾的是,我们决定不再维护此项目 anymore (查看原因)。如果您想标记另一个包作为此包的替代品,请发送电子邮件至 hello@knplabs.com。
为Silex的Doctrine仓库服务提供商
此服务提供商提供了一种简单的方式来为silex数据库拥有仓库。
要求
此服务提供商已构建为与silex扩展的DoctrineServiceProvider
一起工作。有关如何使用它的说明,请参阅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'
));
将在表中插入一个具有“foo”的标题和“一个项目”的描述的项目。
update(array $data, array $identifier)
$app['projects']->update(array('title' => 'bar'), array('title' => 'foo'));
将更新所有标题为“foo”的项目。
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 提供初始代码提取