Я только начал изучать Symfony. Я точно слежу за это официальное руководство. Маршрутизация работает нормально при использовании config/routes.yaml, но при использовании аннотации:
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Annotation\Route;
class LuckyController
{
/**
* @Route("/lucky/number")
*/
public function number(){
$number = mt_rand(0, 100);
return new Response(
'<html><body><h1>MyLucky Number: ' . $number . '</h1></body></html>'
);
}
}
Я получаю такую ошибку:
Exception thrown when handling an exception
(Symfony\Component\Config\Exception\FileLoaderLoadException: [Semantical Error]
The annotation "@Symfony\Component\Annotation\Route" in method
App\Controller\LuckyController::number() does not exist, or could not be auto-loaded
in C:\wamp\vhosts\mysymfony4\config/routes\../../src/Controller/ (which is
being imported from "C:\wamp\vhosts\mysymfony4\config/routes/annotations.yaml"). Make sure
annotations are installed and enabled.)
@Federkun sensio / framework-extra-bundle установлен, согласно моему composer.json. Могу ли я предпринять какие-либо действия, которые отсутствуют в учебнике?




Убедитесь, что вы импортировали необходимые классы в свой контроллер.
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
Ваши ответы работают. Есть идеи, почему в официальном руководстве используется Symfony\Component\Annotation\Route вместо Sensio\Bundle\FrameworkExtraBundle\Configuration\Route?
Поскольку FrameworkExtraBundle больше не используется в S4. Я был озадачен, что вы это приняли. "композитору требуется аннотация" - это все, что вам действительно нужно.
@Cerad Я сделал composer require annotation в соответствии с инструкциями в руководстве. Это не сработало
Хм. Вряд ли. Я только что произвел быструю установку, и она работает как положено. Вам действительно не нужно импортировать дополнительные классы пакета фреймворка. Просто маршрут symfony, как показывает исходный вопрос. Может, захочешь начать новый проект.
Я обнаружил свою ошибку. Я использовал неправильное пространство имен для маршрутизации.
use Symfony\Component\Annotation\Route;
Должно было быть:
use Symfony\Component\Routing\Annotation\Route;
Обновлено: Я хотел удалить этот вопрос, но система не позволяла.
Почему нас всегда сбивают с толку мелочи? Спасибо, что поделился.
У меня была такая же проблема с моим первым проектом Symfony 4 на стандартном веб-сервере apache.
Создание файла .htaccess в моей общей папке устранило проблему.
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
Я добавил файл в общий / каталог, и мое приложение запустилось на прод-сервере;))
Прежде чем проверять что-либо еще, попробуйте это решение! Лучшее предложение для нового проекта Symfony 4, особенно когда вы используете "php bin / console make: controller" для создания вашего первого контроллера.
В моем случае добавление пакета apache решило проблему:
"composer require symfony/apache-pack"
Вам это нужно, если вы запускаете Symfony в браузере через / public /.
Symfony 4 с файлом .htaccess в общей папке, решите проблему с помощью аннотации маршрутизации.
Хочу дать дополнительный совет по поводу ошибок аннотации в symfony4:
Я справился со своей проблемой с этим:
В моем проекте нет config / routes / annotation.yaml, поэтому создайте этот файл и напишите следующие строки:
// config/routes/annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
У меня была такая же проблема, и добавление этого файла сработало для меня. Я не уверен, почему рецепт Flex не создал этот файл автоматически!
При установке sensio/framework-extra-bundle создается config/routes/annotation.yaml.
Убедитесь, что вы установили библиотеку annotations с composer require annotations
Это была моя проблема, а не другая, описанная здесь.
У меня была такая же проблема (в моем проекте Symfony5), но моя ошибка заключалась в использовании одинарных кавычек вместо двойных кавычек для маршрута и имени маршрута. Иногда маленькие глупые ошибки тратят много времени. Кстати, в SF4 / SF5 следует избегать использования маршрутизации FrameworkExtraBundle.
Sensio\Bundle\FrameworkExtraBundle\Configuration\Route
Мы должны использовать компонент Symfony (Маршрутизация / Аннотации).
use Symfony\Component\Routing\Annotation\Route;
вы установили
sensio/framework-extra-bundle?