Я использую Sonata SEO в проекте Symfony 4.
sonata-project/seo-bundle: ^2.7
В моем файле config/packages/sonata_seo.yaml
я определил пользовательский запрос SQL для создания карты сайта следующим образом:
sitemap:
doctrine_orm:
- { connection: doctrine.dbal.default_connection, route: catch_all, parameters: {path: null}, query: "SELECT `path`, `updated_at` AS `lastmod`, 'weekly' AS `changefreq`, '0.5' AS `priority` FROM `pages` WHERE `published` = 1 AND `path` NOT LIKE('checkout/%') AND `path` NOT LIKE('bills/%%')" }
Для облегчения чтения (yaml заставляет меня иметь это в одной строке), вот запрос:
SELECT `path`, `updated_at` AS `lastmod`, 'weekly' AS `changefreq`, '0.5' AS `priority`
FROM `pages`
WHERE `published` = 1 AND `path` NOT LIKE('checkout/%') AND `path` NOT LIKE('bills/%')
В основном я использую WHERE NOT LIKE
, чтобы исключить определенные страницы изгенерируется карта сайта.
Если я запускаю запрос в mysql напрямую, он работает как положено.
Если я запускаю его через утилиту командной строки sonata seo, например:
php bin/console sonata:seo:sitemap '/path/to/sitemap/folder' 'https://dev.test'
Я получаю эту ошибку:
Параметр "\ ') И` путь` НЕ НРАВИТСЯ (\ "bill /" должен быть определен.
У меня естьпытался экранировать различные символы, такие как '
и %
, которые я подозревал в возникновении проблемы, используя префикс \
, однако это выдает мне такие ошибки:
Обнаружено неизвестноescape-символ "\%"
Как правильно экранировать этот запрос в yaml, чтобы он выполнялся?