我目前正在开发一个包含大量表单的大型应用程序.
到目前为止,我一直在手工编写我的表单并编写自己的验证逻辑,但我已经决定是时候开始使用Zend_Form并且它是内置的验证例程.
但是,我一直在绊倒越来越多关于(缺乏)灵活性的问题Zend_Form_Decorator.简单的任务,如为单个输入元素添加额外的按钮,变得非常困难.
我现在已经达到了一个点,我正在认真考虑完全放弃Zend_Form_Element+ Zend_Form_Decorator方法,但我不想失去优秀的验证选项.
基本上,我想要两全其美:
我正在考虑的一种可能的解决方案是在服务器端和视图中一起编写表单.这将允许我轻松验证我自己的表单,但(在我看来相当大)的缺点是每个表单应该定义两次,这只是感觉完全错误.
有没有指导方针呢?你们有没有经历过同样的事情,如果有的话,你们是如何解决这些问题的?
我非常想听听你的观点.
有人可以详细解释如何整合Doctrine 2和Zend Framework 1.11吗?
是否可以仅使用像IE这样的CSS来检测Firefox浏览器?
例如,IE浏览器可以被检测为:
<!--[if IE 7]>
/* IMPORTING CSS FOR IE */
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
可以像这样的代码检测到Firefox浏览器吗?
根据我的经验,我们在Web开发过程中遇到的一个更大的问题是在不同的服务器上保持不同的设置更新和安全.
我的公司拥有自己的CMS,目前已安装在100多台服务器上.目前,我们使用基于FTP的黑客方法,结合特定位置的升级脚本来升级所有CMS设置.当涉及多个自定义模块时,有效地管理这些设置变得越来越困难和风险.
一些上下文信息:我们主要在LAMP堆栈上开发.帮助我们销售CMS的主要因素之一是我们可以插入客户想要的任何东西.这可以是10到10,000行的自定义代码.
很多自定义工作都包含很少的代码; 在Subversion中管理所有这些小块代码对我来说似乎相当繁琐和低效(因为我们每周提供大约2个网站,这将导致很多分支).
如果有我忽视的东西,我很乐意听到你的消息.
提前致谢.
综述:首先,感谢您的所有答案.所有这些都非常有用.
我很可能会使用基于SVN的方法,这使得benlumley的解决方案最接近我将使用的方法.由于这个问题的答案在其他用例中可能有所不同,我会在运行结束时接受最多投票的答案.
请检查答案并投票选出您认为具有最大附加价值的答案.
我写了一个简单的集合类,以便我可以将我的数组存储在对象中:
class App_Collection implements ArrayAccess, IteratorAggregate, Countable
{
public $data = array();
public function count()
{
return count($this->data);
}
public function offsetExists($offset)
{
return (isset($this->data[$offset]));
}
public function offsetGet($offset)
{
if ($this->offsetExists($offset))
{
return $this->data[$offset];
}
return false;
}
public function offsetSet($offset, $value)
{
if ($offset)
{
$this->data[$offset] = $value;
}
else
{
$this->data[] = $value;
}
}
public function offsetUnset($offset)
{
unset($this->data[$offset]);
}
public function getIterator()
{
return new ArrayIterator($this->data);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:在此对象上调用array_key_exists()时,它总是返回"false",因为SPL似乎没有处理此函数.有没有办法解决?
概念证明:
$collection = new App_Collection(); …Run Code Online (Sandbox Code Playgroud) 最近,我越来越发现拥有丰富的编程基础知识是件好事.可悲的是,我是(许多)自学成才的PHP开发人员之一,并且没有后悔选择这条道路.
但是,我仍然认为我应该从零开始将我的知识扩展到一些"真正的"编程语言,并从那里积累我的知识.我无意改变自己的职业道路,但我认为从网络开发框中思考是件好事.
我不喜欢上课或课程,因为我根本没有时间参加.所以:
从零级开始,一步一步地教自己C的最佳方法是什么?
由于我的主要目标是学习更多编程基础知识,C甚至是一个不错的选择吗?
如果没有,会是什么语言?
截至目前的摘要:
首先,感谢所有出色的回应.这些将非常有帮助.虽然大多数人似乎都同意从C开始并不是一个糟糕的选择,但我也看到人们说跳过C并使用C++甚至C#可能是个更好的主意,因为这些语言更新.
我的个人意见仍然是从零级开始是好的,即使语言本身不直接有助于我做的事情.我仍然相信它会间接地让我成为一个更好的程序员.但话说回来,就像说的那样,我对这些语言的了解非常有限,所以我很想听听你对此事的看法.
我不想使用style.css中的样式,所以我决定从DOM中删除style.css.这在Firefox和IE8中工作得很好,但在IE6中却没有:
$("LINK[href='http://www.example.com/style.css']").remove();
Run Code Online (Sandbox Code Playgroud)
使用jQuery的任何其他解决方案?
这是一个例子:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Testing</title>
<script type="text/javascript" src="path/to/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("link[href*='style.css']").remove();
});
</script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="content">...</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是CSS(style.css):
#content {
background-color:#333;
}
Run Code Online (Sandbox Code Playgroud)
仅在IE #content中仍然是黑暗的.:(
也许是jQuery bug?
之间有什么区别:
<form action="">
Run Code Online (Sandbox Code Playgroud)
......和:
<form action=".">
Run Code Online (Sandbox Code Playgroud)
?
我使用jquery作为模块.我的joomla模板有一个集成的jquery菜单.所以他们互相冲突.
有没有办法解决这个问题.遵循模块的脚本代码
<script type="text/javascript" charset="utf-8">
window.onload = function () {
var container = jQuery('div.sliderGallery');
var ul = jQuery('ul', container);
var itemsWidth = ul.innerWidth() - container.outerWidth();
jQuery('.slider', container).slider({
min: 0,
max: itemsWidth,
handle: '.handle',
stop: function (event, ui) {
ul.animate({'left' : ui.value * -1},340);
},
slide: function (event, ui) {
ul.css('left', ui.value * -1);
}
});
};
</script>
Run Code Online (Sandbox Code Playgroud) 在Zend Framework快速入门中,从扩展Zend_Db_Table_Abstract到表数据网关模式的模型进行了更改.
就个人而言,我对这种模式没有多少经验,我一直听说这应该最有可能被用来代替旧的方式.
快速入门的简短示例:
旧方式:
class Default_Model_Guestbook extends Zend_Db_Table_Abstract
{
protected $_name = 'tablename';
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
新方法:
// The actual model
class Default_Model_Guestbook
{
protected $_comment;
protected $_created;
protected $_poster;
// list continues with all columns
}
// Dbtable for this model
class Default_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
{
/** Table name */
protected $_name = 'guestbook';
}
// Mapper
class Default_Model_GuestbookMapper
{
public function save($model);
public function find($id, $model);
public function fetchAll();
}
Run Code Online (Sandbox Code Playgroud)
由于我缺乏这种编程风格的经验,我发现很难从后一种方式中把握实际的好处; 我知道这种方法尽可能地将数据库从实际逻辑中分离出来,这在理论上应该更容易转换到另一个数据库平台.但是,在我工作的任何项目中,我都没有看到这种情况发生. …