На работающем Symfony 3.4 я продолжаю получать эту ошибку:
An Error Occurred! Uncaught PHP Exception Negotiation\Exception\InvalidMediaType: ""
at /var/www/mywebsite/vendor/willdurand/negotiation/src/Negotiation/Accept.php line 24
Я с трудом могу исследовать запрос, так как он терпит неудачу при его построении.
Полная трассировка:
"file": "/var/www/mywebsite/vendor/willdurand/negotiation/src/Negotiation/Accept.php:24",
"trace": [
"/var/www/mywebsite/vendor/friendsofsymfony/rest-bundle/Negotiation/FormatNegotiator.php:105",
"/var/www/mywebsite/vendor/friendsofsymfony/rest-bundle/EventListener/FormatListener.php:60",
"/var/www/mywebsite/vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:212",
"/var/www/mywebsite/vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:44",
"/var/www/mywebsite/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:127",
"/var/www/mywebsite/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php:68",
"/var/www/mywebsite/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php:200",
"/var/www/mywebsite/web/app.php:17"
]
Окружающий код выглядит так:
public function __construct($value)
{
parent::__construct($value);
if ($this->type === '*') {
$this->type = '*/*';
}
$parts = explode('/', $this->type);
if (count($parts) !== 2 || !$parts[0] || !$parts[1]) {
throw new InvalidMediaType();
}
Когда я регистрирую значения $this->type и $value, я нахожу их равными "" (пустая строка).
Когда я пытаюсь поймать это исключение на уровне /var/www/mywebsite/web/app.php:17, у меня продолжает появляться эта ошибка...
Я действительно понятия не имею, кто может часто вызывать мой веб-сайт с этим недопустимым заголовком и как избавиться от этого загрязняющего журнала ошибок.
Любая идея?
Я понимаю, спасибо. Я просто не знаю прямо сейчас, на каком уровне я могу безопасно фильтровать это, не кодируя пакеты symfony и willdurand...
Покажите нам код контроллера, чтобы мы могли посмотреть, что можно сделать.
Как видно из трассировки, он даже не доходит до контроллера. В моем приложении много контроллеров, и из журналов я не могу определить, какой маршрут вызывается. Кажется, исключение возникает во время разрешения маршрута.
Насколько я понимаю, это Rest Bundle использует Negociator, поэтому все маршруты, управляемые остальными пакетами, должны создавать журнал — вы можете проверить это, отправив недопустимый запрос самостоятельно, чтобы увидеть, появляется ли журнал. Может быть способ отключить их, приняв нулевой тип мультимедиа в ваших аннотациях для этого пакета.






Очень вероятно, что это запрос без заголовка HTTP
Accept, возможно, бот? Для переговоров нужен тип носителя, отсюда и ошибка, которую, я думаю, можно смело игнорировать в вашем случае. Если вы хотите от него избавиться, предварительно отфильтруйте запросы, если в них нет нужных заголовков.