Symfony 2 错误:无法自动验证“字符串”类型的值。请提供约束。
我不明白什么限制以及我必须提供什么?
我正在遵循“扩展 Symfony 2”一书第 4 章中的示例。我尝试制作自定义注释“ValidateUser”并在实体用户属性 $phone 上使用它。我也将“ValidUserListenerCustom”注册为服务,它重定向控制器操作 join4Action 的响应。此操作使用所述自定义注释“@ValidateUser(“join_event”)”进行注释。仅当用户的个人资料中有手机号码时,此操作才应将用户添加到事件中。
C:\Bitnami\wampstack-5.5.30-0\sym_prog\star\src\Yoda\UserBundle\Entity\User.php
/**
* @ORM\Column(type="string", length=255, name="phone")
* @Assert\NotBlank(groups={"join_event"})
*/
protected $phone;
Run Code Online (Sandbox Code Playgroud)
C:\Bitnami\wampstack-5.5.30-0\sym_prog\star\src\Yoda\UserBundle\Security\ValidUserListenerCustom.php
<?php
namespace Yoda\UserBundle\Security;
use Doctrine\Common\Annotations\Reader;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
class ValidUserListenerCustom
{
private $reader;
private $annotation_name = 'Yoda\UserBundle\Security\Annotation\ValidateUser';
private $router;
private $session;
private $sc;
private $container;
public function __construct(Reader $reader, Router $rou, Session $session, SecurityContext $sc, Container $cont)
{
/** @var AnnotationReader $reader */
$this->reader = $reader; …Run Code Online (Sandbox Code Playgroud) 如何使用Symfony 2将数组作为参数传递给控制器操作?你能不能写一个例子来定义如何定义路由,其中包含未知长度数组作为参数.例如url:http:// localhost:8000/blog/post /?tags = [tag1,tag2,tag3]其中标签的数量从0到100不等.此路由的示例控制器,其中action返回tags数组的值.
使用以下编码(请参阅下面的routing.yml和controller.php)我收到错误:
Catchable Fatal Error: Argument 3 passed to Symfony\Component\Routing\Route::__construct() must be of the type array, string given, called in C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\vendor\symfony\symfony\src\Symfony\Component\Routing\Loader\YamlFileLoader.php on line 147 and defined in C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\app/config\routing.yml (which is being imported from "C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\app/config/routing_dev.yml").
Run Code Online (Sandbox Code Playgroud)
网址:
http://localhost:8000/blog/post/tag1
http://localhost:8000/blog/post/tag1/tag2/tag3/tag4
http://localhost:8000/blog/post/?tags=[tag1,tag2]
Run Code Online (Sandbox Code Playgroud)
下面是我到目前为止尝试过的路由和控制器文件的不同组合:
//版本r1,routing.yml
blog_post_tags:
path: blog/post/{tags}
defaults: { _controller: DefaultController:list_postsByTagActionQ }
requirements:
tags : "[a-zA-Z0-9,]+"
Run Code Online (Sandbox Code Playgroud)
//版本r2,routing.yml
blog_post_tags:
resource: "@BlogBundle/Controller/"
type: annotation
prefix: /blog/
defaults: { _controller: DefaultController:list_postsByTagActionQ }
Run Code Online (Sandbox Code Playgroud)
//版本r1,2-c1,controller.php
//http://localhost:8000/blog/post/?tags=[tag1,tag2] .
/**
* @Route("/posts/{tags}")
* @Template() …Run Code Online (Sandbox Code Playgroud)