propel/sf-propel-o-r-m-plugin

该软件包最新版本(dev-master)没有提供许可证信息。

Propel的symfony 1.x插件。

安装次数: 161,632

依赖关系: 6

建议者: 6

安全: 0

星标: 109

关注者: 19

分支: 95

开放问题: 14

类型:symfony1-plugin

dev-master / 1.5.x-dev 2023-03-07 18:50 UTC

This package is auto-updated.

Last update: 2024-09-07 21:54:50 UTC


README

Build Status

通过分支1.6替换symfony核心Propel插件为最新版本的Propel。

安装

Composer方式

将require添加到您的composer.json中。名称虽然奇怪,但像Composer的symfony1安装程序那样正确地将驼峰命名。Composer会自动将其安装到您的项目插件目录,并添加依赖项。

{
    "config": {
        "vendor-dir": "lib/vendor"
    },
    "require": {
        "propel/sf-propel-o-r-m-plugin": "dev-master"
    }
}

当然,别忘了将Composer的自动加载器添加到您的ProjectConfiguration中。

// config/ProjectConfiguration.class.php

require __DIR__ .'/../lib/vendor/autoload.php';

require_once dirname(__FILE__) .'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration
{
    public function setup()
    {
        $this->enablePlugins(array(
            'sfPropelORMPlugin',
            ...
        ));

        // mandatory because of the Composer vendor directory naming scheme
        sfConfig::set('sf_phing_path', sfConfig::get('sf_lib_dir') .'/vendor/phing/phing');
        sfConfig::set('sf_propel_path', sfConfig::get('sf_lib_dir') .'/vendor/propel/propel1');
    }
}

Git方式

从Github克隆插件

git clone https://github.com/propelorm/sfPropelORMPlugin.git plugins/sfPropelORMPlugin
cd plugins/sfPropelORMPlugin
git submodule update --init

如果您将Git用作项目的版本控制系统,最好将插件作为子模块添加。

git submodule add https://github.com/propelorm/sfPropelORMPlugin.git plugins/sfPropelORMPlugin
git submodule update --init --recursive

由于Phing和Propel库都包含在插件中,您必须为插件初始化子模块。

SVN方式

通过子版本控制系统安装插件

svn checkout https://github.com/propelorm/sfPropelORMPlugin/trunk plugins/sfPropelORMPlugin

安装PhingPropel

svn checkout http://phing.mirror.svn.symfony-project.com/tags/2.3.3/classes/phing lib/vendor/phing
svn checkout https://github.com/propelorm/Propel/tags/1.6.5 lib/vendor/propel

最后一步

禁用核心Propel插件并启用sfPropelORMPlugin。此外,更改Propel和Phing库的位置。

// config/ProjectConfiguration.class.php

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    //setup the location for our phing and propel libs
    sfConfig::set('sf_phing_path', sfConfig::get('sf_root_dir').'/plugins/sfPropelORMPlugin/lib/vendor/phing/');
    sfConfig::set('sf_propel_path', sfConfig::get('sf_root_dir').'/plugins/sfPropelORMPlugin/lib/vendor/propel/');
    sfConfig::set('sf_propel_generator_path', sfConfig::get('sf_root_dir').'/plugins/sfPropelORMPlugin/lib/vendor/propel/generator/lib/');

    $this->enablePlugins('sfPropelORMPlugin');
  }
}

可选:更新测试项目中propelphing文件夹的引用。

// plugins/sfPropelORMPlugin/test/functional/fixtures/config/ProjectConfiguration.class.php

class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->enablePlugins(array('sfPropelORMPlugin'));
    $this->setPluginPath('sfPropelORMPlugin', realpath(dirname(__FILE__) . '/../../../..'));

    // SVN way
    //sfConfig::set('sf_propel_path', SF_DIR.'/../lib/vendor/propel');
    //sfConfig::set('sf_phing_path', SF_DIR.'/../lib/vendor/phing');

    // Git way
    sfConfig::set('sf_propel_path', realpath(dirname(__FILE__) . '/../../../../lib/vendor/propel'));
    sfConfig::set('sf_phing_path', realpath(dirname(__FILE__) . '/../../../../lib/vendor/phing'));
  }

在安装插件后,您应该更新插件资源。

php symfony plugin:publish-assets

在您的项目的config/propel.ini文件中更改symfony行为路径

// config/propel.ini

propel.behavior.symfony.class                  = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorSymfony
propel.behavior.symfony_i18n.class             = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorI18n
propel.behavior.symfony_i18n_translation.class = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorI18nTranslation
propel.behavior.symfony_behaviors.class        = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorSymfonyBehaviors
propel.behavior.symfony_timestampable.class    = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorTimestampable

(重新)构建模型

php symfony propel:build --all-classes

Propel 1.6的新特性

Propel 1.6是对Propel 1.4(symfony 1.3和1.4捆绑的版本)的向后兼容演化,它添加了一些非常有趣的功能。在这些功能中,您将找到新的Propel查询API,它本质上是一个加强版的Criteria。

// find the 10 latest books published by authror 'Leo'
$books = BookQuery::create()
    ->useAuthorQuery()
    ->filterByFirstName('Leo')
    ->endUse()
    ->orderByPublishedAt('desc')
    ->limit(10)
    ->find($con);

Propel 1.6还支持多对多关系集合按需激活新的核心行为(见下文)、更好的Oracle支持,并且现在采用MIT许可证。

核心Propel行为

Propel 1.6将大多数常见行为捆绑在新的、健壮的构建时间实现中。这些核心行为提供更快的运行时执行和修改数据模型的能力。

sfPropelORMPlugin允许您从您的schema.yml中直接注册核心Propel行为。例如,从Section模型创建树结构

propel:
    section:
    _attributes: { phpName: Section }
    _propel_behaviors:
        - nested_set
    id: ~
    title: { type: varchar(100), required: true primaryString: true }

提示:请查看此插件源代码中的doc/schema.md文件,以获取YAML架构格式的完整参考。

您还可以在propel.ini配置文件中直接为所有模型注册行为。sfPropelORMPlugin已启用symfonysymfony_i18n行为以支持symfony的行为系统和模型本地化功能,但您可以轻松添加自己的行为。

propel.behavior.default = symfony,symfony_i18n,alternative_coding_standards,auto_add_pk

管理生成器扩展

该插件附带了一个名为'admin15'的新管理生成器主题。此主题与sfPropelPlugin的管理生成器主题向后兼容,并基于新的Propel 1.6查询对象提供额外功能。

列表视图增强

  • 简单相关对象激活:您不需要编写自定义的doSelectJoinXXX()方法来激活相关对象。与之前的peer_methodpeer_count_method设置相比,with设置更强大,更容易使用。
  • 自定义查询方法:您可以通过设置query_methods参数来细化执行的查询,以显示列表视图。这允许在无需额外查询的情况下填充额外的列,或预先过滤列表以隐藏用户不应看到的行。
  • 所有列均可排序:虚拟列和外键列现在可以在列表视图中进行排序。您需要设置用于排序的排序方法,但这只需一行代码。不再有列标题无法点击进行排序的列表了!
  • 轻松链接到过滤列表:使用新主题,编写到过滤列表视图的链接非常简单。只需添加GET参数,就像您以前使用symfony 1.2中的管理生成器那样,就可以正常工作。
  • 链接到另一个管理模块:为了使外键列链接到另一个模块中相关对象的编辑视图,您不再需要创建部分。只需在外国键字段配置中定义link_module设置,然后就可以开始了。
  • 轻松自定义过滤器:一旦您可以利用生成的Propel查询类,添加自定义过滤器就会变得非常容易。这允许您,例如,在两分钟内设置全文搜索输入,通过使用单个过滤器来替换多个文本过滤器,从而提高可用性。
  • 自动排序链接:如果模块是在具有排序行为的模型上生成的,则自动添加记录上移和下移的操作。

筛选和编辑表单增强

  • YAML小部件定制generator.yml格式已扩展,允许直接在YAML中定制小部件和验证器,无需编辑表单对象。您还可以在表定义中的display列表中安全地省略字段,而不会丢失任何数据。
  • 纯文本字段:如果您想在表单中显示一些数据而不允许用户编辑它,请使用type: plain属性,就像在symfony 1.2的旧日子里一样。这对于由模型管理的列非常有用,如created_atupdated_at列。

admin15生成器主题的选项已完全在插件源代码中的doc/admin_generator.md文件中进行了文档记录,并由实际示例进行了说明。

表单子框架修改

  • 更新sfWidgetFormPropelChoice小部件:该小部件现在使用新的查询API。您可以通过执行自定义查询方法并使用新的query_methods选项,更轻松地自定义选择列表。
  • 更新Propel验证器sfValidatorPropelChoicesfValidatorPropelUnique都进行了更新,以使用新的PropelQuery对象,并接受类似于sfWidgetFormPropelChoicequery_methods选项。
  • 纯文本小部件和验证器:这个新小部件允许在表单中显示字段,而不会让用户更改它。
  • 轻松嵌入关系:与主对象一起编辑相关对象(例如,在Post表单中编辑Comments)变得轻而易举。新的sfFormPropel::embedRelation()方法会自动完成所有工作,以检索相关对象、为每个相关对象构建表单,并将相关对象表单嵌入到主表单中。嵌入的关系表单允许您无需额外代码即可编辑添加删除相关对象。
class ArticleForm extends BaseArticleForm
{
  public function configure()
  {
    $this->embedRelation('Book');
  }
}

Propel小部件、验证器和表单类已在插件源代码中的doc/form.md文件中进行了完全文档记录。

筛选子框架修改

现在,您可以合并或嵌入筛选器到筛选器中,这完全是即插即用的。

class ArticleFilter extends BaseArticleFilter
{
  public function configure()
  {
    $this->mergeForm(new AuthorFilter());
  }
}

路由修改

该插件提供了两个新的路由类,分别是 sfPropelORMRoutesfPropelORMRouteCollection。这些类默认用于由 propel 管理生成器构建的模型中。它们的行为与之前的 sfPropelRoute 类类似——只是不再使用 methods 选项。相反,使用 query_methods 选项在调用 getObject()getObjects() 时执行一系列任意的查询方法。

author:
    class: sfPropelORMRouteCollection
    options:
    model:                author
    module:               author
    prefix_path:          /author
    column:               id
    query_methods:
        object: [filterByIsPublished]
        list:   [filterByIsPublished, orderByLastName]
    with_wildcard_routes: true

query_methods 也可以有额外的参数数组。

author:
    class: sfPropelORMRouteCollection
    options:
    model:                author
    module:               author
    prefix_path:          /author
    column:               id
    query_methods:
        object:
        filterByIsPublished: [false]
        list:
        filterByIsPublished: []
        orderBy:             [LastName]
    with_wildcard_routes: true

sfPropelORMRoute 还让您的代码在动作中更容易阅读。您可以直接使用对象的路线类名调用getter,而不仅仅是调用 getObject()

public function executeShow(sfWebRequest $request)
{
    // using sfPropelORMRoute with 'Author' as model
    $this->author = $this->getRoute()->getAuthor();
}

sfPropelORMRoutesfPropelORMRouteCollection 中都新增了一个选项,即 connection 选项,它允许设置要使用的特定的 Propel 连接。示例

author_show:
  url:     /author/:id
  class:   sfPropelORMRoute
  param:   { module: myModule, action: show }
  options: { model: Author, type: object, connection: my_connection }
author:
    class: sfPropelORMRouteCollection
    options:
    model:                Author
    module:               author
    prefix_path:          /author
    column:               id
    connection:           my_connection
    with_wildcard_routes: true