我正在使用这个教程作为一个基于Code Igniter / Doctrine的项目的基础。
http://www.phpandstuff.com/articles/codeigniter-doctrine-scratch-day-3-user-signup-form
我的项目使用YAML模式文件来生成模型,而不是按原样使用代码
我遇到了一个问题,因为我不知道如何使用YAML来表示以下内容:
$this->hasMutator('password', '_encrypt_password');(这段代码来自用户模型代码,在“添加修改器”下)具体地说,我在使用$this->hasMutator行时遇到了问题
我已经用谷歌搜索了Doctrine,symfony (我知道它大量使用Doctrine )的蓝色搜索文档,甚至在代码库中grep了对修改器的引用-我什么也没有找到
有没有办法用Doctrine YAML来表示行$this->hasMutator('password','_encrypt_password');?
发布于 2010-12-04 00:20:42
(只需要说明一下:我们在这里讨论的是Doctrine 1.x,而不是Doctrine 2.x)不,没有一种方法可以直接在YAML模式中定义修改器。您确定必须在那里注册赋值函数吗?
你可以通过创建自己的教条行为来绕过这个限制。理论行为可以在YAML模式中分配给您的模型。点击此处阅读更多信息:
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/pl
在您的示例中,行为将如下所示:
class EbonhandsTemplate extends Doctrine_Template
{
public function setUp()
{
$this->hasMutator('password', '_encrypt_password');
}
public function _encrypt_password
....
}在您的yaml模式中:
EbonhandsModel:
actAs: [EbonhandsTemplate]发布于 2010-12-04 15:06:12
我最终通过向生成的User.php模型添加一个新方法来解决这个问题,如下所示:
public function setPassword($pass)
{
$this->_set('password', $this->_encrypt_password($pass));
}它实现了与上面链接的教程相同的最终结果(例如,允许在不丢失代码的情况下通过YAML修改用户模型模式),但感觉不是那么优雅或通用。
我将Olof的回答标记为正确/被接受,因为他的解决方案感觉更具可扩展性,而OO -OO的解决方案有点“难闻”
发布于 2012-01-07 16:13:51
如果您从YAML文件中加载数据,那么关于修改器有一件重要的事情需要注意。
正如您在tutorial中提到的,如果您的User类如下:
class User extends ModelBaseUser
{
public function setUp() {
parent::setUp();
$this->hasMutator('password', '_encryptPassword');
}
protected function _encryptPassword($value) {
$salt = $this->_get('salt');
$this->_set('password', md5($salt . $value));
}
}如果您使用loadData()从YAML文件填充数据库,请确保首先加载salt字段,如下所示:
ModelUser:
User_Admin:
username: admin
salt: $secret_
password: adminPa$$
email: admin@promosquare.com而不是:
ModelUser:
User_Admin:
username: admin
password: adminPa$$
salt: $secret_
email: admin@promosquare.comhttps://stackoverflow.com/questions/4296279
复制相似问题