Я пишу команду, которая обновит мой файл robots.txt, у меня есть страницы категорий с небольшим содержанием, и у меня есть общедоступный флаг db, чтобы показывать или нет эти страницы, теперь я хочу создать команду, которая автоматически исключает эти страницы в файле robots.txt.
Мой robots.txt находится в веб-каталоге. Я создал команду, которая работает на
sudo php app/console webmain:robot_excluded_category_command
И моя команда выглядит так
class RobotExcludedJournalsCommand extends ContainerAwareCommand
{
/**
* {@inheritdoc}
*/
protected function configure()
{
$this
->setName('webmain:robot_excluded_category_command')
->setDescription('Exclude category in robots');
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$container = $this->getContainer();
new GFinderBundle($container->get('kernel'));
$result = [];
foreach (CategoryRepository::getAll() as $category) {
if ($category->getPublic() == 0){
$result [] = [
'id' => $category->getName()
];
}
}
ladybug_dump_die($result);
}
В моем $result я получил все категории, которые следует исключить из robots.txt
например, имена (наука, фитнес, игры, жизнь ...)
Мне нужно добавить или отредактировать это в robots.txt с помощью моей команды
# Categories
User-agent: *
Disallow: /category/science
Disallow: /category/fitness
Disallow: /category/gaming
Disallow: /category/life
.
.
.
Как лучше всего отредактировать файл robots.txt с помощью команды symfony, чтобы проверить список и add/remove(update) с последними изменениями, которые я получаю с моим результатом?






Рассмотрим это с другой стороны - не создавайте файл, просто укажите маршрут под названием robots.txt. Пока вы возвращаете text/plain в качестве типа MIME, не имеет значения, настоящий это файл или нет.
Затем вы можете просто создать метод для создания содержимого для вас. Подумайте о добавлении какого-либо кеширования, чтобы предотвратить перегрузку вашего приложения.
Что-то вроде этого:
// if no cache {
$robotsList = Robots::list();
// }
$response->setContent($robotsList);
$response->setStatusCode(Response::HTTP_OK);
// sets a HTTP response header
$response->headers->set('Content-Type', 'text/plain');
// prints the HTTP headers followed by the content
$response->send();
Нет необходимости, вы просто добавляете ненужную сложность. Не нужно беспокоиться о разрешениях или записи в файл.
И что вы думаете об этом в foreach $ RobotTxtFile = fopen ($ RobotDir, "w"); $ txt = "Запретить: / category /".$ category-> getName ()." \ n "; Файл будет перезаписываться каждый раз при установке команды, и это тоже может помочь ....