我目前正在使用haxe targeting php建立一个网站,我遇到了haxe.Web.Dispatch库的问题。
在我尝试实施doDefault()规则之前,一切运行良好。
我的调度api中有以下规则:
doIndex(){ ... }
doPosts(){y:String, m:String, n:String){ ... }
这些都会重定向到正确的网页。例如,这两种方法都可以正常工作:
http://foo.com/index
http://foo.com/posts/2013/01/post-title
现在我已经实施了
doDefault() {...}
为了将任何其他网址重定向到404网页,但它无效。转到上面的URL仍然可以正常工作,但转到
http://foo.com/bar
给出以下错误
uncaught exception: DETooManyValues
in file: C:\wamp\www\website\bin\lib\haxe\web\Dispatch.class.php line 191
#0 C:\wamp\www\website\bin\lib\Index.class.php(9): haxe_web_Dispatch->runtimeDispatch(Object(_hx_anonymous))
#1 C:\wamp\www\website\bin\lib\Index.class.php(12): Index->__construct()
#2 C:\wamp\www\website\bin\index.php(9): Index::main()
#3 {main}
如果在api上找不到相应的方法doXXXX 对象,或者如果URL是/,则使用动作doDefault。一个 异常DispatchError.DENotFound(“XXXX”)如果没有则抛出 默认操作(XXXX这里是URL部分的占位符 名称)。
但它没有说明DETooManyValues异常。有人有什么想法吗?
答案 0 :(得分:1)
如果您要分派的网址比匹配操作的部分多,则会引发DETooManyValues
错误。
所以如果你有:
doPage( name:String );
然后默认情况下“/ page / aboutus /”会起作用,但“/ page / aboutus / 2 /”不会。这也适用于doDefault()
- “/”将起作用,“/ bar”不会(默认情况下)。
让它发挥作用的诀窍是使用“Dispatch”参数。
doPage( name:String, d:haxe.web.Dispatch ) {
trace('Get page $name, with other parts: ${d.parts}');
}
doDefault( d:haxe.web.Dispatch ) {
trace('Get page $name, with other parts: ${d.parts}');
}
如果Dispatch
知道你的action /方法有这个dispatch参数,那么它假定你的方法知道如何处理额外的值,并且不再抛出错误。您可以使用d.parts
数组访问额外部分。
已添加奖金:
您还可以使用d:Disaptch
参数:
// Redirect to a different page, same get/post parameters
d.redirect("/differentpage/", d.params);
// Redirect to a different controller. If this is in /doDefault/, the whole URL is passed to the sub-controller.
// If it is in `doPage` and the URL is /page/some/other/part, only `/some/other/part` will be passed on.
d.dispatch(new SomeOtherController());
我有一篇博文,如果您有兴趣,可以解释更多内容:
http://jasononeil.com.au/2013/05/29/creating-complex-url-routing-schemes-with-haxe-web-dispatch/
也可以随时提出问题,总是热衷于帮助其他人使用Haxe网站:)