gpt4 book ai didi

php - 在 Symfony2 中干净地扩展 Propel 模型的策略?

转载 作者:可可西里 更新时间:2023-10-31 23:21:38 24 4
gpt4 key购买 nike

我想这样做:

// Model class
namespace Bookshop\Inventory\Model;
use Core\Inventory\Model\Product as BaseProduct;

class Book extends BaseProduct {
// ...
}


// Query class
namespace Bookshop\Inventory\Model;
use Core\Inventory\Model\ProductQuery as BaseProductQuery;

class BookQuery extends BaseProductQuery {
// ...
}

看起来不错,对吧?但是:

$book = BookQuery::create()->find($id);
var_dump(get_class($book));
// expected: Bookshop\Inventory\Model\Book
// actual: Core\Inventory\Model\Product

据我所知,这是因为 Propel 的关系是在构建时定义的,而不是运行时......我发现实现这一点的唯一方法是使用 GlorpenPropelBundle 中的扩展行为。并在我的配置中定义扩展类:

glorpen_propel:
extended_models:
Core\Inventory\Model\Product: Bookshop\Inventory\Model\Book

很好,它有效,但肯定有更好的方法吗?我错过了什么,或者这真的是在 Propel + Symfony 中扩展模型的唯一方法吗?我真的很想使用 Propel 而不是 Doctrine,但是像这样的事情让我觉得 Propel 根本不适合超过一定规模的项目......

(推进 1.6 + Symfony 2.3 顺便说一句)

最佳答案

我是 GlorpenPropelBundle 的创建者,所以我想我可以阐明一些问题 :)

Propel 确实提供了用于修改的模型类,但令人遗憾的是,当谈到外部 Bundle 与他们自己的模型时,类是在它们内部生成的。没有二级用户类。

在某些情况下,您可以使用 Propel 单继承行为 - http://propelorm.org/documentation/09-inheritance.html或 hakre 提供的解决方案。

如果你想简单地添加一些方法到vendor bundle model,那你就不走运了。在古代有http://trac.symfony-project.org/wiki/HowToExtendPropelPluginModel但现在有一些情况它不会工作 - 这就是我的包开始行动的地方。

如果您在自己的应用程序中,您总是可以通过以下方式进行类扩展(因为 Propel 用户类只生成一次):

namespace Bookshop\Inventory\Model;
//your custom class extending Propel base class
class Book extends \Core\Inventory\Model\om\BaseProduct { ... }

namespace Core\Inventory\Model;
//propel user class extending your custom class
class Book extends Bookshop\Inventory\Model\Book {...}

关于php - 在 Symfony2 中干净地扩展 Propel 模型的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com