簡體   English   中英

Symfony2生產模式下的路由和緩存問題(app.php)

[英]Routing and Cache issues in Symfony2 production mode (app.php)

我在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()控制器添加默認參數值來測試產品結果:

 public function indexAction($page = 1) {

而且,正如預期的那樣..它現在可以工作,但是prod版本沒有更新為dev_app.php上的當前更新。

因此,我運行cache:clear --env-prodassets:install --env-prodassetic:dump --env-prod ,什么都沒有發生。

有什么我想念的嗎?

編輯實際上,當我嘗試運行命令php app/console cache: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。

如果您在清除緩存時遇到錯誤,那么您當然不會清除緩存! 因此,問題有所不同,並且出在您的實體上。 展示下。

UPDATE

實際上,我是Symfony和php的新手,但是閱讀錯誤似乎表明Symfony無法識別“ varchar”類型。 我會嘗試在setCategory函數和注釋中擦除\\ varchar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM