了适合网络公司的名字做设计师,我还以后能不能去4A工作

Yii学习笔记:实现类似于ThinkPHP的模型字段映射,字段别名-爱编程
Yii学习笔记:实现类似于ThinkPHP的模型字段映射,字段别名
在TP中,我们只要在模型类中定义一个
protected $_map = array(
'name' =&'username', // 把表单中name映射到数据表的username字段
=&'email', // 把表单中的mail映射到数据表的email字段
这样,我们前端模板中使用 &input type=text name="name"/&
在模型收集表单数据时会自动将值同时映射到username字段上。
好处是避免数据库字段直接暴露。
但很遗憾,我在学习Yii过程中没有找到类似的机制,而Yii的类库很多,我又不敢贸然自己扩展,总觉得在某个角落里有某个类可能已经提供了解决方案,怕自己做重复无意义之举。
经过一系列的思想斗争,楼主还是决定自己动手啦。。
方法很简单,请先看代码:
class CustomModel extends CActiveRecord {
//定义所需要收集的属性
public $password1;
public static function model($className=__CLASS__)
return parent::model($className);
public function tableName()
return '{{custom}}';
public function rules(){
return array(
array("username,password,email,password1","safe")
//字段映射配置
protected $_alias_ = array(
"passwd" =& "password"
//通过引用传递处理映射
protected function afterConstruct(){
parent::afterConstruct();
//字段映射处理
if(!empty($this-&_alias_)){
foreach($this-&_alias_ as $a =& $b){
if(property_exists($this,$a) && property_exists($this,$b)){
$this-&$a = &$this-&$b;
&?php defined("APP_NAME")?&
&form action="" method="post"&
&th&用户名:&/th&
&td&&input type="text" name="username" placeholder="请设置您的账号名" value=""/&&/td&
&th&邮箱:&/th&
&td&&input type="email" name="email" placeholder="example@website" value=""/&&/td&
&th&密码:&/th&
&td&&input type="password" name="password" value=""/&&/td&
&th&重复密码:&/th&
&td&&input type="password" name="password1" value=""/&&/td&
&td colspan="2"&&input type="submit" value="提交"/&&/td&
可以发现,我在表单中使用了password字段名作为密码,但是我数据库中的字段是passwd,如果直接这样收集表单,是无法将密码数据入库的。
所以我在模型类中定义了1个方法:
afterConstruct() 一个属性
protected $_alias_ 我们在$_alias_这个属性里面定义映射,比如我定义了 "passwd"=&"password"的映射。
afterConstruct()这个方法是在你实例化模型类之后执行的,可以看成在 $model = new CustomModel()的时候触发,这里面主要做了一个工作,就是检测$_alias_有没有定义映射,如果有的话,我们使用php的引用传递特性来使两个字段指向同一个值。
最后,为了可以全局使用,建议在components/目录下建立一个 CommonModel类,将afterConstruct()方法放在这个类里,其他模型继承这个类就可以了,这样只要在各自的模型中定义_alias_属性即可。
/////////基于事件的处理方法
class CommonAR extends CActiveRecord{
function init(){
$this-&onAfterConstruct = array($this,"autoMap");
//字段映射配置
protected $_alias_ = array(
function autoMap($event){
//字段映射处理
if(!empty($this-&_alias_)){
foreach($this-&_alias_ as $a =& $b){
if(property_exists($this,$a) && property_exists($this,$b)){
$this-&$a = &$this-&$b;
假设在components/下创建一个 CommonAR类,我们在init()方法中注册一个事件
$this-&onAfterConstruct = array($this,"autoMap"); 对应的事件方法就是类里面的autoMap()
然后创建具体模型的时候继承CommonAR类,定义$_alias_即可。
版权所有 爱编程 (C) Copyright 2012. . All Rights Reserved.
闽ICP备号-3
微信扫一扫关注爱编程,每天为您推送一篇经典技术文章。问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
写请楚一点,我这里是API,第三方提交的post数据,
我并不知道form-data会传来什么数据。
所以我要的是获取所有通过POST form-data提交过来的数据。
正常来说$request-&all拿到的是前台传来的所有数据,
但是第三方提交过来的,使用$request-&all并不能直接拿到form-data数据,
获者说我还没有发现可以直接拿到form-data的方法
现在只能用原生的方法拿..
自己解决了,$request-&all可以拿到第三方通过GET提交的数据,但是POST的拿不到,可以使用getcontent拿到。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
$request-&all(); // 获取form表单中的所有字段值
$request-&input('name'); // 获取form表单中输入框name='name'的字段值
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
自己搞定了,你们说的办法没有一个可以,request-&all获取的是get,post用这个方法获取不到,要用getcount才行。那几个点踩的,不知道你们什么心理,没关系,我自己搞定了。
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App> 博客详情
摘要: ThinkPHP中有一个十分好用的功能,就是模型中可以定义字段映射,将前端表单中的字段名与真实数据库字段名建立映射,避免了直接在表单中暴露数据库字段。
在TP中,我们只要在模型类中定义一个
protected $_map = array(
'name' =&'username', // 把表单中name映射到数据表的username字段
=&'email', // 把表单中的mail映射到数据表的email字段
这样,我们前端模板中使用 &input type=text name="name"/&
在模型收集表单数据时会自动将值同时映射到username字段上。
好处是避免数据库字段直接暴露。
但很遗憾,我在学习Yii过程中没有找到类似的机制,而Yii的类库很多,我又不敢贸然自己扩展,总觉得在某个角落里有某个类可能已经提供了解决方案,怕自己做重复无意义之举。
经过一系列的思想斗争,楼主还是决定自己动手啦。。
方法很简单,请先看代码:
class CustomModel extends CActiveRecord {
//定义所需要收集的属性
public $password1;
public static function model($className=__CLASS__)
return parent::model($className);
public function tableName()
return '{{custom}}';
public function rules(){
return array(
array("username,password,email,password1","safe")
//字段映射配置
protected $_alias_ = array(
"passwd" =& "password"
//通过引用传递处理映射
protected function afterConstruct(){
parent::afterConstruct();
//字段映射处理
if(!empty($this-&_alias_)){
foreach($this-&_alias_ as $a =& $b){
if(property_exists($this,$a) && property_exists($this,$b)){
$this-&$a = &$this-&$b;
&?php defined("APP_NAME")?&
&form action="" method="post"&
&th&用户名:&/th&
&td&&input type="text" name="username" placeholder="请设置您的账号名" value=""/&&/td&
&th&邮箱:&/th&
&td&&input type="email" name="email" placeholder="example@website" value=""/&&/td&
&th&密码:&/th&
&td&&input type="password" name="password" value=""/&&/td&
&th&重复密码:&/th&
&td&&input type="password" name="password1" value=""/&&/td&
&td colspan="2"&&input type="submit" value="提交"/&&/td&
可以发现,我在表单中使用了password字段名作为密码,但是我数据库中的字段是passwd,如果直接这样收集表单,是无法将密码数据入库的。
所以我在模型类中定义了1个方法:
afterConstruct() 一个属性
protected $_alias_ 我们在$_alias_这个属性里面定义映射,比如我定义了 "passwd"=&"password"的映射。
afterConstruct()这个方法是在你实例化模型类之后执行的,可以看成在 $model = new CustomModel()的时候触发,这里面主要做了一个工作,就是检测$_alias_有没有定义映射,如果有的话,我们使用php的引用传递特性来使两个字段指向同一个值。
最后,为了可以全局使用,建议在components/目录下建立一个 CommonModel类,将afterConstruct()方法放在这个类里,其他模型继承这个类就可以了,这样只要在各自的模型中定义_alias_属性即可。
/////////基于事件的处理方法
class CommonAR extends CActiveRecord{
function init(){
$this-&onAfterConstruct = array($this,"autoMap");
//字段映射配置
protected $_alias_ = array(
function autoMap($event){
//字段映射处理
if(!empty($this-&_alias_)){
foreach($this-&_alias_ as $a =& $b){
if(property_exists($this,$a) && property_exists($this,$b)){
$this-&$a = &$this-&$b;
假设在components/下创建一个 CommonAR类,我们在init()方法中注册一个事件
$this-&onAfterConstruct = array($this,"autoMap"); 对应的事件方法就是类里面的autoMap()
然后创建具体模型的时候继承CommonAR类,定义$_alias_即可。
人打赏支持
码字总数 85171
更新了,增加了一个基于事件的处理办法,代码更干净了。
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥ThinkPHP5的I函数无法获取表单二维表单名的变量 - ThinkPHP框架
标题不知道怎么写,具体问题如下
比如我现在表单有这2个input
&input type=&text& name=&config[sitename]&
value=&网站名称& &
&input type=&text& name=&config[keywords]&
value=&关键词& &
如果是3.2.3版,可以直接I('post.config') 这样来获取到这2个字段的值,但是TP5却不行,获取不到
积分:2304
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。tp5是否有数据库映射功能? - ThinkPHP框架
如果字段太多,一个个获取很繁琐,如果有类似tp3的表单映射功能就好了,不知道为什么官方会取消?
飞上蓝天llj
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。}

我要回帖

更多关于 适合网络公司的名字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信