Intereting Posts

Почему мой Symfony2 устанавливает 404ing при доступе к app.php?

В Symfony2 при доступе к моему приложению локально через app_dev.php все работает нормально. Однако, когда я обращаюсь к app.php, это 404s:

К сожалению! Произошла ошибка

Сервер вернул «404 Not Found».

Что-то сломалось. Отправьте нам электронное письмо по электронной почте и сообщите нам, что вы делали, когда произошла эта ошибка. Мы исправим его как можно скорее. Извини за

Свежая установка 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 Это решило мою проблему.

Не $ kernel = new AppKernel ('prod', TRUE); атрибут true: $ kernel = new AppKernel ('prod', TRUE); он активирует режим отладки, и он не рекомендуется для продукта.

Имела та же проблема .

на самом деле может быть несколько вопросов. но вы должны очистить кеш с помощью команды console в качестве маршрутов кэширования symfony, шаблонов и config.

Это обычное кэширование 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

Теперь попробуйте перезагрузить страницу в своем браузере, и вы увидите, что она работает.

Хорошо, у меня была такая же проблема, и очистка кеша не разрешила его. После часа чтения сообщений, где все говорят «ясный кеш», я решил по-настоящему понять, что происходит. Поэтому я попытаюсь объяснить другим людям, как я (кто только начал). Надеюсь, я не ошибаюсь, и если да, то, пожалуйста, поправьте меня.

Я предполагаю, что вы следуете учебнику книги, где у вас есть Acme/DemoBundle . И доступ к нему из производственной среды дает вам 404 . Прежде всего, вы должны иметь четкое представление о том, что означает пакет Symfony. Это что-то вроде плагина. Это как головоломка. Symfony – это большая головоломка, и ваше приложение – часть головоломки.

Итак, во-первых, давайте посмотрим в файле ./app в ./app . То, что мы видим, регистрирует связки. Как положить кусочки головоломки. И сначала мы говорим «хорошо, я хочу основные части головоломки, пакеты Symfony», а затем мы говорим «и если я в режиме отладки, мне также нужны некоторые другие части». И есть ваша штука, ваш комплект. Вот почему вы не можете получить доступ к нему из производственной среды. Вы регистрируете только пакет из среды разработчика. Зарегистрируйте свой пакет ( Acme/DemoBundle/AcmeDemoBundle ) вверху, и вы можете получить доступ к нему из рабочей среды.

Во-вторых, перейдите в ./app/config/routing_dev.yml . Это маршрутизация для среды разработки. Мы говорим «хорошо, у меня есть информация о маршрутизации в @AcmeDemoBundle/Resources/config/routing.yml а в среде разработки наш пакет найден. Но посмотрите ./app/config/routing.yml Мы не делаем что-то о нашей пользовательской маршрутизации. Это похоже на то, что Framework не знает о существовании нашего файла маршрутизации, и это в производственной среде. Поэтому добавление последней части routing_dev.yml в routing.yml (in ./app/config/ ) должен устранить проблему.

После этого очистите кеш и проверьте, работает ли /app.php/random/[number] . Должен быть.

Надеюсь, это поможет кому-то вроде меня, понимая некоторые основы.

Когда вы выполните ответ Антона и все еще получите ошибку, вы можете попробовать следующее:

В 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 

Я должен согласиться с Эндрю.

Превращение второго AppKernel в TRUE позволяет только более четкое сообщение об отладке (и вы можете заметить, что приложение не быстрее, чем ожидалось).

В моем случае он сказал мне, что у меня не было доступного для производства маршрута (т. Е. Routing.yml).

Я должен был добавить следующие строки, как упоминается Misbah, и следовать другим обычным процедурам, чтобы мое приложение работало на полной скорости.

 _welcome:
     шаблон: /
     defaults: {_controller: AcmeDemoBundle: Welcome: index}

Похоже, что вы неправильно настроили маршрутизацию.

Проверьте файл routing.yml если он содержит маршрут по умолчанию для / . Если нет, добавьте его в контроллер / действие, которое вы хотите запустить.

Ну, я нашел более простой и быстрый ответ:
first: $kernel = new AppKernel('prod', TRUE);
В файле app.php.
Затем, на вашем routing.yml (приложение / config / routing one, а не ваш пакет) просто удалите созданный по умолчанию код после объявления вашей маршрутизации.

_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, если я запустил его где-нибудь еще, он будет работать как производство. Вы можете, очевидно, добавить любые проверки, которые вы хотите, проверить для промежуточных / производственных / 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

Простите, что я не знаю, как правильно использовать виджет кода. Но я надеюсь, что смогу вам помочь.