gridonic/repository-service-provider

Silex 的 Doctrine 仓库服务提供商

1.0.1 2014-10-21 08:48 UTC

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));
}

鸣谢