专家:定制sfDoctrineGuardPlugin
开始
如果你是刚刚开始使用原则,检查之前博客如何开始一个新的symfony +教义项目。ob娱乐下载
安装sfDoctrineGuardPlugin
的sfDoctrineGuardPlugin尚未包装symfony 1.2所以你需要通过svn安装如下:ob娱乐下载
$ cd /道路/ / syob娱乐下载mfony1.2project svn co http://svn.symfony-project.com/plugins/sfDoctrineGuardPlugin/trunk插件/ sfDoctrineGuardPlugin美元
现在你的插件的插件文件夹需要告诉symfony启用它。ob娱乐下载编辑配置/ ProjectConfiguration.class.php
和使sfDoctrineGuardPlugin
。
公共函数设置(){这个美元- >enableAllPluginsExcept(数组(“sfPropelPlugin”,“sfCompat10Plugin”));}
一定要清楚你的缓存后做前面的步骤。
美元。/ob娱乐下载 symfony cc
使模块
sfDoctrineGuardPlugin
有三个模块在默认情况下,为了使用这些我们需要使他们在我们的应用程序/后端/ config / settings.yml
。打开和修改enabled_modules
设置如下:
所有:.settings: enabled_modules:[违约,sfGuardUser、sfGuardGroup sfGuardPermission]
模式和数据设备
首先我们需要添加一些新的模型来定义的关系模式sfGuardUser
模型中包含sfDoctrineGuardPlugin
。因此,创建一个配置/理论/ schema.yml
并将以下YAML。
在这个例子中我们将添加一个配置文件
模型和关联sfGuardUser
包括一些额外的信息。默认情况下,sfGuardUser
模式只包括身份验证所需的信息过程,不多也不少。因此,为了获取额外信息创建一个是常见的做法配置文件
模型和关联sfGuardUser
。
简介:列:sf_guard_user_id:整数(4)first_name:字符串(255)middle_name:字符串(255)last_name:字符串(255)email_address:字符串(255)关系:用户:类:sfGuardUser foreignType:一个
现在您将看到我们定义概要文件和sfGuardUser之间的一对一的关系。现在通过添加模式,下面是可能的。
$ user=新sfGuardUser();$ user- >配置文件- >first_name=“乔纳森。”;
也可以访问的关系从另一端原则自动使双向的关系。
美元的概要文件= Doctrine_Query::创建()- >从(“配置文件p”)- >innerJoin(“p。用户u ')- >在哪里(“p。id = ?”,1)- >fetchOne();$ user=美元的概要文件- >用户;
现在,我们有了自己的模式定义,我们需要定义一些简单的装置测试数据。编辑数据/夹具/ data.yml
并将以下YAML。
sfGuardUser: jwage:用户名:密码:jwage changeme is_super_admin:真正的简介:first_name:乔纳森·middle_name:赫尔利last_name:工资email_address: jonwage@gmail.com
现在,我们有了自己的模式和数据设备的定义,我们需要建立的一切。可以通过运行下面的命令:
美元。/ob娱乐下载 symfony学说:build-all-reload
这是很简单的!现在让我们做一个检查,确保一切正常,数据正确加载。运行下面的DQL查询检查数据。
美元。/ob娱乐下载 symfony学说:dql”sfGuardUser u, u。配置文件p" >> doctrine executing dql query DQL: FROM sfGuardUser u, u.Profile p found 1 results - id: '1' username: jwage algorithm: sha1 salt: 9509acc86d1201e5d8314c2421339896 password: a9119b7ca39bbb842fed640ed93c121990a37dbf is_active: true is_super_admin: true last_login: null created_at: '2008-11-12 13:40:42' updated_at: '2008-11-12 13:40:42' Profile: id: '1' sf_guard_user_id: '1' first_name: Jonathan middle_name: Hurley last_name: Wage email_address: jonwage@gmail.com
你甚至可以做相反的配置文件
的对象用户
记录了。
美元。/ob娱乐下载 symfony学说:dql”p, p。用户u" >> doctrine executing dql query DQL: FROM Profile p, p.User u found 1 results - id: '1' sf_guard_user_id: '1' first_name: Jonathan middle_name: Hurley last_name: Wage email_address: jonwage@gmail.com User: id: '1' username: jwage algorithm: sha1 salt: 9509acc86d1201e5d8314c2421339896 password: a9119b7ca39bbb842fed640ed93c121990a37dbf is_active: true is_super_admin: true last_login: null created_at: '2008-11-12 13:40:42' updated_at: '2008-11-12 13:40:42'
现在我们已经准备好看看启用模块和查看他们所提供的功能。开放http://yourhost/backend_dev.php/sf_guard_user
你应该看到sfGuardUser
模块在行动如下:
定制的
现在我们终于到达有趣的部分。我们添加了一个配置文件
模型和相关sfGuardUser
但是我们怎么编辑在编辑sfGuardUser
通过管理记录发电机吗?这是非常简单的。我们需要调整几件代码以使这一切成为可能。
首先,让我们更新我们sfGuardUserAdminForm
嵌入的ProfileForm
。要做到这一点,我们需要从插件复制一个文件到我们的项目我们可以定制表单。
美元cp插件/ sfDoctrineGuardPlugin / lib /形式/理论/ sfGuardUserAdminForm.class。php /理论/ lib /形式
现在打开lib /形式/理论/ sfGuardUserAdminForm.class.php
和覆盖配置()
方法来定制它和嵌入ProfileForm
。
公共函数配置(){父::配置();profileForm美元=新ProfileForm(这个美元- >对象- >配置文件);设置(profileForm美元(“id”],profileForm美元(“sf_guard_user_id”]);这个美元- >embedForm(“配置文件”,profileForm美元);}
我们需要的最后一件事使这所有的工作都是定制的generator.yml
与插件。为此我们需要覆盖的一些插件。
mkdir /应用程序后端/模块/ sfGuardUser美元mkdir /应用程序后端/模块/ sfGuardUser /配置触摸应用程序/后端/模块/美元sfGuardUser / config / generator.yml
现在我们需要打开应用程序/配置/ generator.yml /后端模块
我们的编辑和调整它包含嵌入的形式我们命名配置文件
在前面的步骤。
发电机:类:sfDoctrineGenerator参数配置:形式:类:sfGuardUserAdminForm显示:“没有一个”:(用户名、密码、password_again概要文件)“权限和组”:[is_active、is_super_admin groups_list, permissions_list]
请注意我们是补充道配置文件
事情的列表显示在表单中。
最终产品
现在,当你有能力添加和编辑用户输入个人信息直接在用户的形式。
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
谢谢
thx乔纳森为所有你的文章。他们说服我改变教义。
我读完这两件事情需要澄清:谁能解释哪些字段时,需要设置嵌入形式?所有PK和颗吗?
同时,有人可以解释合并和嵌入形式之间的区别吗?
良好的工作jwage
@Rob0x id和外键需要复位,因为如果你不那么表单将提交与null值null值和更新对象,使对象保存为null值的外键,这意味着不会相关的对象。
因为我们填充ProfileForm对象的概要文件对象$ user - >然后当我们保存用户概要文件对象,它会自动知道满足两个对象之间的外键。基本上如果你嵌入一种形式到另一个,是一个关系学说,只是确保对象是联系在一起的,和教义将负责确保正确设置所有外键。
唯一可能的解释在于saveEmbeddedForms方法,可有时伟大但节省一切在这种情况下的两倍。
有解决方案吗?
“虽然出口模型类“概要”SQL:找不到类sfGuardUser”
我发现只有“PluginsfGuardUser”插件自由。
知道如何解决它吗?
@Ice_j7我很快就会发布一篇文章,演示了如何使用原则在一些示例查询数据模式。
我跟着你的教程一步一步;我最新的分支版本和我仍然有同样的问题:概要表填充2记录每个sfGuardUser记录。
似乎复制记录插入嵌入式表单时保存的对象($形式- > getObject() - >保存(con)美元),其他地方在updateObject方法:$ this - >对象- > fromArray(美元值)。
这种情况的解决方法可能是在sfGuardUserAdminForm创建下面的方法:
公共函数saveEmbeddedForms (con = null,形成美元= array ())
{
返回父:saveEmbeddedForms(案子,美元形式);
}
不过我不知道这是多好. .
500内部服务器错误
路线“sf_guard_user_collection”并不存在。
这个异常引起,如果我叫http://example.org/backend_dev.php/sf_guard_user
但是:
http://example.org/backend_dev.php/sf_guard_user/new
显示了表单来插入一个新的用户。与路由真的有些不对劲,但我不知道。
有提示吗?
在sfDoctrineGuardPlugin / lib / sfGuardRouting.class。php有三个错误:“with_wilcard_routes”必须“with_wildcard_routes”。
修复后这一切都按预期工作。
http://myserver/backend_dev.php/sfGuardUser
我得到这个错误
“路线”sf_guard_user_collection“不存在。”
我已经双重检查和没有“wilcard”输入错误,我已经清除缓存。
谢谢
家伙……我可以通过电子邮件授权而不是用户名?