Symfony2生产模式下的路由和缓存问题(app.php)

Symfony2生产模式下的路由和缓存问题(app.php),php,symfony,routing,production-environment,Php,Symfony,Routing,Production Environment,我在symfony2有一条路线 evr_admin_languages: pattern: /admin/languages/{page} defaults: { _controller: EvrAdminBundle:Languages:index , page: 1 } 如您所见,页面参数设置为默认值“1” 因此,该控制器必须在没有任何错误的情况下工作 public function indexAction($page) { $quer

我在symfony2有一条路线

evr_admin_languages:
    pattern:  /admin/languages/{page}
    defaults: { _controller: EvrAdminBundle:Languages:index , page: 1 }
如您所见,页面参数设置为默认值“1”

因此,该控制器必须在没有任何错误的情况下工作

      public function indexAction($page) {
            $query = $this->getDoctrine()->getManager()
//...
这就是app_dev.php中发生的情况,但app.php的情况不同,它返回500个错误

这是我的prod.log文件:

[2014-01-26 12:39:08] request.CRITICAL: Uncaught PHP Exception RuntimeException: "Controller "Evr\AdminBundle\Controller\LanguagesController::indexAction()" **requires that you provide a value for the "$page" argument (because there is no default value or because there is a non optional argument after this one)."** at D:\Sources\symfera\app\cache\prod\classes.php line 2075 {"exception":"[object] (RuntimeException: Controller \"Evr\\AdminBundle\\Controller\\LanguagesController::indexAction()\" requires that you provide a value for the \"$page\" argument (because there is no default value or because there is a non optional argument after this one). at D:\\Sources\\symfera\\app\\cache\\prod\\classes.php:2075)"} []
因此,我通过向indexAction()控制器添加一个默认参数值来测试prod结果:

 public function indexAction($page = 1) {
而且,正如所料。。它现在可以工作了,但是prod版本没有更新到我在dev_app.php上的当前更新

因此,我运行了
cache:clear--env-prod
资产:install--env-prod
资产:dump--env-prod
,但什么也没发生

我错过了什么吗

EDIT实际上,我在尝试运行命令
php应用程序/控制台缓存时没有注意到命令提示符错误消息:clear--env=prod
,这是错误消息:

 The type hint of parameter "category" in method "setCategory" in class "Evr
 \HomeBundle\Entity\Category" is invalid.

 [ReflectionException]
 Class varchar does not exist
注意,我发布了路由问题,这似乎是一个缓存问题,因为我认为它们是相关的。

编辑2这是我的类别实体,请注意,在开发模式下清除缓存时没有错误,我的实体是使用ORM原则自动生成的

<?php

namespace Evr\HomeBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;

/**
 * Category
 *
 * @ORM\Table(name="ev_category")
 * @ORM\Entity
 */
class Category
{
    /**
     * @var integer
     *
     * @ORM\Column(name="category_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

     /**
     * 
     * @ORM\ManyToOne(targetEntity="Language",inversedBy="categories")
     * @ORM\JoinColumn(name="language_id",referencedColumnName="id")
     */
    private $language;

    /**
     * @var varchar
     *
     * @ORM\Column(name="category", type="varchar", length=255)
     */
    private $category;

    /**
     * @ORM\OneToMany(targetEntity="Subcategory", mappedBy="category")
     */
    protected $subcategories;

    public function __construct(){
        $this->subcategories=new ArrayCollection();
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set category
     *
     * @param \varchar $category
     * @return Category
     */
    public function setCategory(\varchar $category)
    {
        $this->category = $category;

        return $this;
    }

    /**
     * Get category
     *
     * @return \varchar 
     */
    public function getCategory()
    {
        return $this->category;
    }
}

我没有足够的声誉发表评论,但我会在这里尝试

您的功能正常:

public function indexAction($page) {
            $query = $this->getDoctrine()->getManager()
//...
但是当你调用它时,你必须提供它&page

如果清除缓存时出错,当然不会清除缓存!所以问题是不同的,在你的实体中。展示它

更新

事实上,我对Symfony和php非常陌生,但是在阅读错误时,Symfony似乎无法识别“varchar”类型。
我会尝试删除setCategory函数和注释中的\varchar。

我不确定,但您的索引函数不应该是这样的
indexAction($page)
?对不起,我发错了。不是在我自己的代码中。因为我仍然在使用
索引($page=1)
…所以为了发布它,我删除了所有内容。即使是
索引($page)
…也会出现500个错误非常感谢@giannalessandro。。我编辑了我的问题,您将在编辑2中找到类别实体。请注意,类别实体是使用ORM/Symfony2+1为您的答案自动生成的。是的,我删除了这个varchar类型,并替换为字符串类型。。。非常感谢你。。。我从setters参数中删除了\varchar。现在它可以工作了