我对面向对象编程比较陌生.我非常理解这些概念,但实际上,我很难找到有关如何在我的Zend Framework应用程序中最好地使用模型的信息.
具体来说,我有一个不使用数据库表的模型(不扩展任何东西).它使用getter和setter来访问其受保护的成员.我发现自己正在努力学习如何在视图中最好地展示这个模型.我在视图模板中不需要逻辑,但我发现自己处于以下情况:
在我的控制器中:
$object = new Object();
$object->setName('Foo Bar');
$this->view->object = $object;
Run Code Online (Sandbox Code Playgroud)
在我的视图模板中:
<h2><?= $this->object->getName() ?></h2>
Run Code Online (Sandbox Code Playgroud)
我真的不喜欢在我的视图模板中调用函数,但我不知道更好的方法.我不希望我的模型成员公开,但我基本上想要达到相同的结果:
<h2><?= $this->object->name ?></h2>
Run Code Online (Sandbox Code Playgroud)
我不希望我的控制器完成所有关于模型的所有工作:
$object = new Object();
$object->setName('Foo Bar');
$this->view->object = $object;
$this->view->object->name = $object->getName();
Run Code Online (Sandbox Code Playgroud)
在Zend Framework中使用模型的最佳实践是什么?任何人都可以推荐任何可以帮助我理解Zend Framework中的模型/视图困境的教程吗?
我正在使用URLLoader将一些键/值对发送到php脚本,然后将其转换为电子邮件,发送(或不发送),然后使用响应回显字符串.
起初它工作正常.URLLoader发布,一分钟后我收到了我的电子邮件,但由于某种原因,我没有得到我的回复.事实上,我的COMPLETE事件似乎根本没有发生.这让我感到困惑,因为如果我收到我的电子邮件,我知道我必须正确发送所有内容.这是我的代码:
public class Mailman{
public static const METHOD:String = URLRequestMethod.POST;
public static const ACTION:String = "mailer.php";
public static var myLoader:URLLoader = new URLLoader();
private static function onMessageProgress(e:Event){
var L:URLLoader = e.target as URLLoader;
Output.trace("PROGRESS: "+L.bytesLoaded+"/"+L.bytesTotal);
for(var k in L){
Output.trace(" "+k+": "+L[k]);
}
}
private static function onOpen(e:Event){
Output.trace("Connection opened");
}
private static function onComplete(e:Event){
Output.trace("Complete!");
}
private static function onStatusChange(e:HTTPStatusEvent){
Output.trace("Status Changed to "+e.status);
}
private static function onMessageFail(e:Event){
PanelManager.alert("ERROR: Could not send your request. Please try again …
Run Code Online (Sandbox Code Playgroud) <script type="text/javascript">
var p = s.getMaximum();
</script>
<form action="/cgi-bin/Lib.exe" method="POST" name="checks" ID="Form1">
<INPUT TYPE="text" NAME="inputbox" VALUE="VAR P FROM JAVA SCRIPT HERE?" ID="Text1"><P></form>
Run Code Online (Sandbox Code Playgroud)
可以传递javascript值'p'作为输入表单的值吗?
谢谢.
我想在JavaScript中看到对象的结构(用于调试).PHP中的var_dump有什么类似的东西吗?
我没有做过很多与.NET的工作,所以如果这有一个简单的解决方案,请原谅我.
"问题"(实际上更令人烦恼)是VC#IDE 默认打开所有具有继承自System.Windows.Forms.Form
设计视图的类的文件.唯一的例外是"*.Designer.cs"文件.
一般来说,这很好.但是,如果我有一个partial class
实现一些控制处理程序代码,这就变得非常烦人.例如,当双击源文件时,您将被带到Winforms设计器并显示一个空表单.完全没用.
要解决此问题,您需要右键单击相关的源文件,然后从上下文菜单中选择"查看代码".
我的问题很简单:是否有任何一种摆脱这种荒谬的方式?如果没有,我想知道人们如何组织他们的UI处理代码.
谢谢!
我想在标准的LAMP托管情况下使用mod重写将/ directory之类的网页地址转换为/directory/index.html.我对以斜线结尾的地址有效.我找不到一种方法来处理不结束斜杠的地址.
看起来它应该工作的是:
rewriterule ^(.*)/$ $1/index.html [L] /* addresses ending in / */
rewriterule ^(.*(?!html))$ $1/index.html [L] /* where the problem is */
Run Code Online (Sandbox Code Playgroud)
但第二行导致500服务器错误.如果我在第二行添加单个字母x:
rewriterule ^(.*)/$ $1/index.html [L]
rewriterule ^(.*x(?!html))$ $1/index.html [L]
Run Code Online (Sandbox Code Playgroud)
它开始工作,但仅适用于以x结尾的目录名称.我尝试用许多不同的东西替换x.任何比真实字符更复杂的东西(如[^ x]或.+)都会产生500服务器错误.
并且,为了满足我自己的好奇心,有谁知道为什么添加一个真实的字母会使服务器错误和功能完善的规则之间产生差异?
[接受的答案]感谢Gumbo,我能够使用rewritecond来近似解决方案:
rewritecond %{REQUEST_URI} !\.[^/]+$ rewriterule (.+) $1/index.html [L]
这可以,但过滤器不仅仅是.html - 它可以阻止其他页面.不幸,
rewritecond %{REQUEST_URI} !\.html$
Run Code Online (Sandbox Code Playgroud)
导致服务器错误:
由于可能的配置错误,请求超出了10个内部重定向的限制.如有必要,使用'LimitInternalRecursion'增加限制.
我还是想知道原因:
rewriterule ^(.*(?!html))$ $1/index.html [L]
Run Code Online (Sandbox Code Playgroud)
导致循环.上半年应该检查它是否不以html结束.由于下半部分添加 .html,它似乎功能相当于:
while(substr($address,-4)!='html') $address.='html'
显然我错过了一些东西.
尝试将WCF测试客户端与我的WCF服务一起使用时出错.这是服务代码:
[ServiceContract]
public interface IEmployeeService
{
[OperationContract(Name = "GetEmployee")]
[WebGet(RequestFormat = WebMessageFormat.Xml,
UriTemplate = "/Employees/{employeeNumber}")]
Employee GetEmployee(string employeeNumber);
}
public Employee GetEmployee(string employeeNumber)
{
var employeeNumberValue = Convert.ToInt32(employeeNumber);
var employee = DataProvider.GetEmployee(employeeNumberValue);
return employee;
}
<system.serviceModel>
<services>
<service name="Employees.Services.EmployeeService"
behaviorConfiguration="metaBehavior">
<endpoint address=""
behaviorConfiguration="webHttp"
binding="webHttpBinding"
contract="Employees.Services.IEmployeeService">
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange">
</endpoint>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="metaBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
我能够使用WCF测试客户端连接到服务,但是当我尝试调用GetEmployee(employeeNumber)时,我收到以下错误:
无法调用该服务.可能的原因:服务离线或无法访问; 客户端配置与代理不匹配; 现有代理无效.有关更多详细信息,请参阅堆栈跟踪.您可以尝试通过启动新代理,还原到默认配置或刷新服务来进行恢复.
我能够通过从浏览器发送请求成功调用此服务.
知道为什么我不能使用WCF测试客户端吗?
我有一个字符串的源容器我想从源容器中删除与谓词匹配的任何字符串,并将它们添加到目标容器中.
remove_copy_if
和其他算法只能重新排序容器中的元素,因此必须由erase
成员函数跟进.我的书(Josuttis)说remove_copy_if
在目标容器中的最后一个位置之后返回一个迭代器.因此,如果我只在目标容器中有一个迭代器,我erase
该如何调用源容器?我已经尝试使用目标的大小来确定从源容器的末尾回去多远,但没有运气.我只提出了以下代码,但它会进行两次调用(remove_if
和remove_copy_if
).
有人能让我知道正确的方法吗?我确信两次线性调用不是这样做的方法.
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
class CPred : public unary_function<string, bool>
{
public:
CPred(const string& arString)
:mString(arString)
{
}
bool operator()(const string& arString) const
{
return (arString.find(mString) == std::string::npos);
}
private:
string mString;
};
int main()
{
vector<string> Strings;
vector<string> Container;
Strings.push_back("123");
Strings.push_back("145");
Strings.push_back("ABC");
Strings.push_back("167");
Strings.push_back("DEF");
cout << "Original list" << endl;
copy(Strings.begin(), Strings.end(),ostream_iterator<string>(cout,"\n"));
CPred Pred("1"); …
Run Code Online (Sandbox Code Playgroud) 如果有人在某个月的第一周或最后一周说某些事情,你会如何定义这个范围?
我正在研究一个需要以直观的方式处理这类事情的图书馆,但我的直觉并没有声称一个案例或另一个案例.
我可以让它选择不同的行为,但仍然需要一个良好的默认值.
举一个具体的例子,我将随机选择一个月:2008年7月
s m t w r f s
--------------------
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Run Code Online (Sandbox Code Playgroud)
(注意:我假设一周从星期日开始,但问题也可以在周一提出)
什么跨度是这个月的第一周?
第二周是第一个权利之后的第7天?
这个月的最后一周有多长?
非维基评论欢迎