pomm/pomm-service-provider

Silex µ框架的Pomm服务提供者。

1.2.0 2014-04-02 10:21 UTC

This package is auto-updated.

Last update: 2024-09-07 18:36:22 UTC


README

这是为Pomm服务提供者Silex微型框架。

安装

安装 PommServiceProvider 有多种方式。最简单的一种是使用以下脚本 此脚本。它将创建目录树结构和你的 composer.json 文件(见下文Composer部分)。

Composer

Composer 是安装和运行服务提供者的最简单方式。只需在 composer.json 中添加以下内容

"pomm/pomm-service-provider":    "dev-master"

require 部分。调用「 composer.phar install」 应该会与 Pomm 库一起安装。

Git子模块

如果你使用git,请使用子模块

$ mkdir vendor
$ git submodule add git://github.com/chanmix51/PommServiceProvider.git vendor/ghub/PommServiceProvider
$ git submodule add git://github.com/chanmix51/Pomm.git vendor/pomm

否则,你只需下载存档,将其展开在子目录中,并告诉自动加载器 GHub\Silex\Pomm 命名空间位于 src 项目子目录下。

使用Pomm服务

建议将你的应用程序分成3个文件

bootstrap.php
在此文件中加载和配置扩展
application.php
在此文件中定义你的控制器。
generate_model.php
这是用于扫描postgresql的架构并生成模型文件的CLI工具。

这样,index.php 文件将简化到最简单的表达式

<?php #index.php

require(__DIR__.'/../application.php');

$app->run();

application.php 本身仅由你的控制器组成。它通过包含 bootstrap.php 文件来包含配置

<?php #bootstrap.php

require_once __DIR__.'/vendor/autoload.php';

$app = new Silex\Application();

// EXTENSIONS
...
# pomm
$app->register(
    new Pomm\Silex\PommServiceProvider(),
    array(
        'pomm.class_path' => __DIR__.'/vendor/pomm',
        'pomm.databases' => array(
            'default' => array(
                'dsn' => 'pgsql://user:pass@host:port/dbname',
            )))
        );

PommServiceProvider 类接受以下参数

  • pomm.class_name:这是要使用的服务类(可选)默认为 Pomm\Service。给定的服务类必须扩展 Pomm\Service
  • pomm.databases:一个格式为 'name' => array('dsn' => $dsn, 'class' => 'My\\Database\\Class') 的数据库数组。

扩展将为每个连接实例化数据库类,这意味着它不会打开连接。如果在连接中执行语句,则会打开连接。如果你想使用自己的数据库类,请提供其在 class 参数中的完整路径。默认情况下,此参数设置为 Pomm\Connection\Database

在上面的例子中,我们向自动加载器注册了一个 Model 命名空间,因此生成的文件将放置在 Model\DbName\SchemaName 命名空间中。

生成映射文件

创建以下脚本

<?php #generate_model.php

require __DIR__.'/bootstrap.php';

$scan = new Pomm\Tools\ScanSchemaTool(array(
    'schema' => 'YOUR SCHEMA',
    'database' => $app['pomm']->getDatabase(),
    'prefix_dir' => __DIR__.'/Model',
    ));
$scan->execute();