Для генерации файла robots.txt в Symfony 4 мы можем воспользоваться возможностями пакета MakerBundle
, который упрощает создание новых компонентов в Symfony.
В начале убедитесь, что у вас установлен MakerBundle
. Если его нет, установите его, выполнив команду:
composer require maker --dev
После установки пакета мы можем воспользоваться командой make:file
, чтобы создать новый класс, отвечающий за генерацию файла robots.txt. Выполните следующую команду в терминале:
php bin/console make:file src/Generator/RobotsTxtGenerator
Команда создаст новый класс RobotsTxtGenerator.php
в директории src/Generator
. Откройте этот класс и отредактируйте его содержимое следующим образом:
<?php namespace AppGenerator; class RobotsTxtGenerator { public function generate(): string { $content = "User-agent: *n"; $content .= "Disallow: /admin/n"; // Здесь можно добавить дополнительные директивы для файла robots.txt return $content; } }
В данном примере мы генерируем простой файл robots.txt
, который разрешает доступ к всем ресурсам сайта для всех поисковых роботов, кроме папки /admin/
, которая будет исключена из индексации.
Если вам нужно добавить еще дополнительные директивы к файлу robots.txt
, вы можете расширить метод generate()
и добавить нужные правила. Например:
public function generate(): string { $content = "User-agent: *n"; $content .= "Disallow: /admin/n"; $content .= "Disallow: /private/n"; $content .= "Disallow: /secret/n"; // Дополнительные директивы return $content; }
После того, как класс RobotsTxtGenerator
готов, мы можем воспользоваться его функционалом в контроллере Symfony. Создайте новый контроллер, который будет отвечать за генерацию файла robots.txt
. Например:
<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAnnotationRoute; use AppGeneratorRobotsTxtGenerator; class RobotsTxtController extends AbstractController { /** * @Route("/robots.txt", name="robots_txt") */ public function index(RobotsTxtGenerator $generator): Response { $content = $generator->generate(); return new Response($content, 200, ['Content-Type' => 'text/plain']); } }
Контроллер содержит метод index()
, который принимает RobotsTxtGenerator
в качестве зависимости и вызывает его метод generate()
для создания контента файла robots.txt
. Затем метод возвращает этот контент как текстовый отклик с заголовком Content-Type: text/plain
.
Наконец, добавьте маршрут для контроллера RobotsTxtController
в файл config/routes.yaml
:
robots_txt: path: /robots.txt controller: AppControllerRobotsTxtController::index
Теперь, если вы откроете веб-браузер и перейдете по адресу /robots.txt
, вы должны увидеть сгенерированный файл robots.txt
с указанными вами директивами.
Таким образом, мы использовали MakerBundle
для создания класса, который генерирует контент файла robots.txt
, и создали контроллер, который вызывает этот класс и отдает его результат в качестве файла robots.txt
при обращении к соответствующему маршруту.