gpt4 book ai didi

php - 缺少 Phalcon url 参数但仍会执行操作

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:31 25 4
gpt4 key购买 nike

我正在使用最新的 phalcon 版本,我发现很难找到有关如何在缺少所需参数时使操作不执行的信息,如下所示

class TestController extends ControllerBase{

public function detailsAction($id) {
$this->view->SetVar('theid',$id);
}
}

当我按如下方式访问它时

http://localhost/phalcon/test/details

View 仍然被执行,但是 id 丢失了,当我通过

访问它时
http://localhost/phalcon/test/details/5

我得到值 5 。

有人可以告诉我如何在缺少所需参数时将其设置为“NotFound”或其他内容。而且我有很多具有此类要求的功能,因此如果路由中有一般设置或其他可以帮助我的东西,我将不胜感激。

谢谢大家

最佳答案

您可以拦截调度程序事件 beforeExecuteRoute 并对您的目标方法进行一些自省(introspection):

        if ($event->getType() == 'beforeExecuteRoute') {
$cn = $dispatcher->getNamespaceName().'\\'.$dispatcher->getHandlerClass();
$r = new ReflectionMethod($cn, $dispatcher->getActiveMethod());
$method_params = $r->getParameters();
$url_pars = $dispatcher->getParams();
$pass = true;
$i = 0;
foreach ($method_params as $param) {
if(!$param->isOptional() && !isset($url_pars[$i++])) {
$pass = false;
}
}
if(!$pass) {
return $dispatcher->forward(array('controller' => 'error', 'action' => 'route404'));
}
return true;
}

这段代码用于调度程序服务。

当您不为每个没有默认值的操作参数提供 GET 参数时(isOptional 在这种情况下为 false),$pass 变量设置为 false你将被路由到 404。

这是一个案例,当然,更复杂的条件会让你有更细粒度的控制。

关于php - 缺少 Phalcon url 参数但仍会执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com