gpt4 book ai didi

php - 在 Symfony2 的路由中根据需要设置一个参数而不定义它

转载 作者:可可西里 更新时间:2023-10-31 23:30:30 24 4
gpt4 key购买 nike

我有一个这样定义的 Action

/**
* @Route("/doSomething/{someId}", name="do_something")
* @Method("GET")
* @ParamConverter("someId", class="MyBundle:Something")
*/
public function someAction(Something $something) {
...
}

我想使用 token 参数,作为“正常”查询字符串参数传递,例如:

/myController/doSomething/5?token=2a47c2ff18a5d53cbaa5840b6c7c4008

使此参数成为必需参数并为其设置一些要求的正确方法是什么,例如 - 匹配 ^[\da-z]+$?有没有办法在注释语法中指定它?

我看到的一种方法是手动执行,例如:

public function someAction(Something $something, Request $request) {
$token = $request->query->get('token');
$regexConstrain = new Regex('^[\da-z]+$');
$regexConstrain->message = 'Invalid token';

$errors = $this->get('validator')->validate($token, $regexConstrain);

if (count($errors)) {
throw new \InvalidArgumentException($errors[0]->getMessage());
}

...
}

但是有没有更快的内置方法来做到这一点?

最佳答案

我不知道是否有更好的方法或这种方法是否会更快,但是 OptionsResolver可以使用值验证处理这种情况。

定义见this french article ,您可以使用 OptionResolver 来验证查询参数。

use Symfony\Component\OptionsResolver\OptionsResolver;

public function someAction(Something $something, Request $request)
{
$resolver = new OptionsResolver();
$resolver->setAllowedValues('token', function ($value) {
return (bool) preg_match('/^[\da-z]+$/', $value);
});

// will throw a `Symfony\Component\OptionsResolver\Exception\InvalidArgumentException`
// if token doesn't match the regex
$resolver->resolve($request->query->all());

...
}

关于php - 在 Symfony2 的路由中根据需要设置一个参数而不定义它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578602/

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