簡體   English   中英

當我訪問app.php時,為什么我的Symfony2會安裝404?

[英]Why is my Symfony2 install 404ing when I access app.php?

在Symfony2中,當通過app_dev.php在本地訪問我的應用程序時,一切正常。 但是,當我訪問app.php時它是404s:

哎呀! 發生錯誤

服務器返回“404 Not Found”。

有些東西壞了。 請發送電子郵件至[email],告訴我們發生此錯誤時您在做什么。 我們會盡快修復它。 對於某事很抱歉

新的symfony 2安裝不包含生產環境的任何路由。 如果您查看app/config/routing_dev.yml ,您會注意到您在演示應用程序中看到的所有路由都僅為開發定義。 如果您希望在app.php上測試演示,則必須先將路由從routing_dev.yml復制到routing.yml ,並在AcmeDemoBundle下啟用AppKernel.php

$bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
+       new Acme\DemoBundle\AcmeDemoBundle()
    }

if (in_array($this->getEnvironment(), array('dev', 'test'))) {
-       $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    } 

(+是你應該添加的行, - 是你應該刪除的行)

我有同樣的問題,我只是清除了緩存。 php app/console cache:clear --env=prod這解決了我的問題。

不要將該屬性設置為true: $ kernel = new AppKernel ('prod', TRUE); 它將激活調試模式,不建議用於prod。

這是正常的Symfony緩存工作。 您所做的任何更改都將在app_dev.php(開發環境)中查看/測試,但不會在app.php(生產環境)中進行,因為它會緩存所有內容。

我遵循一個有效的簡單規則。 每次我更新app\\config\\routing.yml任何內容(或任何真正的更改),我想在生產中看到它,你必須通過運行以下控制台命令清除CACHE

Symfony 2. *: php app/console cache:clear --env=prod

Symfony 3. *: php bin/console cache:clear --env=prod

現在嘗試在瀏覽器上重新加載頁面,您將看到它的工作原理。

有同樣的問題

實際上可能有幾個問題。 但是您必須使用console命令清除緩存,因為symfony緩存路由,模板和配置。

好的,我遇到了同樣的問題,清除緩存沒有解決它。 經過一個小時的閱讀帖子,每個人都說“清除緩存”,我決定真正了解最新情況。 所以我會嘗試向像我這樣的人(剛剛開始)解釋。 希望我沒錯,如果是的話,請糾正我。

我假設您正在閱讀本書的教程,其中包含Acme/DemoBundle 從生產環境訪問它會給你404 首先,您應該清楚地了解Symfony中的捆綁包含義。 它就像一個插件。 這就像一個謎題。 Symfony就像一個大謎題,你的應用程序是一個難題。

因此,首先,讓我們看看在AppKernel.php文件./app 我們看到的是注冊捆綁包。 喜歡把拼圖的碎片。 首先我們說“好吧,我想要拼圖的主要部分,Symfony捆綁”然后我們說“如果我處於調試模式,我還想要其他一些部分。” 還有你的作品,你的作品。 這就是為什么你不能從生產環境訪問它。 您只能從開發人員環境注冊捆綁包。 在頂部注冊您的軟件包( Acme/DemoBundle/AcmeDemoBundle ),您可以從生產環境訪問它。

其次,進入./app/config/routing_dev.yml 這是開發環境的路由。 我們說“好吧,我在@AcmeDemoBundle/Resources/config/routing.yml有一些路由信息,在開發環境中,找到了我們的包。但請查看./app/config/routing.yml 。我們不知道提及我們的自定義路由。這就像框架不知道我們的路由文件的存在。這是在生產環境中。所以將routing_dev.yml的最后一部分添加到routing.yml (在./app/config/ )應該解決問題。

之后清除緩存並檢查/app.php/random/[number]有效。 它應該是。

我希望這能幫助像我這樣的人,理解一些基礎知識。

我必須同意安德魯。

將第二個AppKernel轉為TRUE只允許更清晰的調試消息(您可能會注意到應用程序並不比預期的快)。

就我而言,它告訴我沒有可用於生產的_wecome路線(即routing.yml)。

我不得不添加Misbah提到的以下行,並按照其他常用程序使我的應用程序全速運行。

_welcome:
    pattern:  /
    defaults: { _controller: AcmeDemoBundle:Welcome:index }

當你按照安東的回答,仍然得到錯誤,你可以嘗試以下方式

routing.yml ,添加此行(僅)

_welcome:
    pattern:  /
    defaults: { _controller: AcmeDemoBundle:Welcome:index }

_demo_secured:
    resource: "@AcmeDemoBundle/Controller/SecuredController.php"
    type:     annotation

_demo:
    resource: "@AcmeDemoBundle/Controller/DemoController.php"
    type:     annotation
    prefix:   /demo

不要添加這一行

_assetic:
    resource: .
    type:     assetic

_wdt:
    resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
    prefix:   /_wdt

_profiler:
    resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
    prefix:   /_profiler

_configurator:
    resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
    prefix:   /_configurator

_main:
    resource: routing.yml

這是我寫的routing.yml一個例子

# Internal routing configuration to handle ESI
#_internal:
#   resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
#   prefix:   /_internal
_welcome:
    pattern:  /
    defaults: { _controller: AcmeDemoBundle:Welcome:index }

_demo_secured:
    resource: "@AcmeDemoBundle/Controller/SecuredController.php"
    type:     annotation

_demo:
    resource: "@AcmeDemoBundle/Controller/DemoController.php"
    type:     annotation
    prefix:   /demo

看起來您沒有正確設置路由。

檢查您的routing.yml文件是否包含/的默認路由。 如果沒有,請在要運行的控制器/操作中添加一個。

好吧,我找到了一個更簡單,更快的答案:
第一個: $kernel = new AppKernel('prod', TRUE);
在app.php文件上。
然后,在您的routing.yml(app / config / routing one,而不是您的bundle)上,只需在聲明路由后刪除默認生成的代碼。

_demo: resource: "@AcmeDemoBundle/Controller/DemoController.php"
type: annotation
prefix: /demo

必須刪除。 這樣做之后,它現在正在沒有問題!

將您的環境更改為developmet,以使用在routes_dev.yml中配置的路由

$ kernel = new AppKernel('dev',true);

免責聲明:我對Symfony完全不熟悉。

來自其他框架似乎很奇怪,您無法根據當前環境變量(即路徑/域)切換環境/調試。

所以我將app.php重命名為app_prod.php並將app.php更新為以下內容:

<?php

if ($_SERVER['HTTP_HOST'] == 'localhost') {
    require_once 'app_dev.php';
} else {
    require_once 'app_prod.php';
}

因此,如果我在本地運行代碼,它將使用dev,如果我在其他地方運行它將作為生產運行。 您顯然可以添加所需的任何檢查,檢查登台/生產/開發文件路徑而不是主機名。

這個問題困擾我很多,這是我的解決方案:首先更改文件行21,如下所示:

$kernel = new AppKernel('prod', true);

然后在查看/app.php時可能會出現報告問題

實際上我做了這些更改以避免'404錯誤':

在appKernel.php中:評論

$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();

new Acme\DemoBundle\AcmeDemoBundle()

在函數registerBundles()的底部;

# AcmeDemoBundle routes (to be removed)
_acme_demo:
    resource: "@AcmeDemoBundle/Resources/config/routing.yml"

to routing.yml

對不起,我不知道如何使用代碼片段小部件,但我希望我可以幫助你。

暫無
暫無

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

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