Библиотека собеса по PHP | вопросы с собеседований
Відкрити в Telegram
Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/5JWKxA Для обратной связи: @proglibrary_feeedback_bot
Показати більше3 112
Підписники
-324 години
-97 днів
-1930 день
Архів дописів
Что такое нормализация?
Нормализация является процессом организации структуры данных в базе данных для достижения оптимального хранения и обработки информации. Целью нормализации является устранение избыточности и аномалий данных, а также обеспечение целостности и эффективности работы с данными.
В процессе нормализации данные разделяются на отдельные таблицы и связываются при помощи отношений. Нормализация определяет правила, которым должны следовать отношения между таблицами, чтобы минимизировать избыточность и обеспечить логическую структуру данных.
Выделяют различные уровни нормализации (нормальные формы), такие как:
1. Первая нормальная форма (1NF): Требует, чтобы каждая колонка в таблице содержала только атомарные (неделимые) значения, а каждая строка была уникальной.
2. Вторая нормальная форма (2NF): Находит и устраняет избыточные зависимости между колонками в таблице, разделяя данные на связанные таблицы.
3. Третья нормальная форма (3NF): Устраняет транзитивные зависимости между колонками, вынося их в отдельные таблицы.
Существуют также более высокие уровни нормализации, такие как четвертая нормальная форма (4NF), пятая нормальная форма (5NF) и другие. Эти нормальные формы помогают сделать базу данных более гибкой, масштабируемой, эффективной и согласованной.
Нормализация является важным шагом в проектировании базы данных, однако следует помнить, что чрезмерная нормализация может привести к сложности и медленным запросам. Поэтому в некоторых случаях может быть необходимым достигнуть компромисса между нормализацией и денормализацией данных для повышения производительности и удобства использования базы данных.
Библиотека собеса по PHP
Почему 0 == «foo» возвращает true?
В PHP при нестрогом сравнении (==) строки с числом происходит преобразование типов для выполнения сравнения. До версии PHP 8, если строка не начиналась с числового значения, она преобразовывалась в 0. Поэтому выражение
0 == «foo» возвращало true, так как обе стороны сравнения становились 0.
Однако, начиная с PHP 8, поведение изменилось. Теперь, если строка не является числовой, сравнение с числом возвращает false без преобразования строки в число. Таким образом, в PHP 8 и выше, 0 == «foo» возвращает false.
Это изменение направлено на улучшение предсказуемости и безопасности сравнения данных в PHP.
Библиотека собеса по PHP⚙️ Как работает API
Proglib рассказывает базу в формате рилса
Что такое генераторы и как их использовать?
В PHP генераторы —
это специальный тип итератора, который позволяет создавать итераторы по требованию. Они предоставляют удобный способ работы с большими наборами данных, не загружая их все в память сразу. Генераторы помогают оптимизировать использование памяти и улучшают производительность в случаях, когда нам нужно обработать большой объем данных пошагово.
Генераторы создаются с использованием ключевого слова yield. Когда функция с yield возвращает значение, она «замораживается» на этом месте, сохраняя свою текущую структуру и состояние. Когда генератор запрашивает следующий элемент, он продолжает выполнение функции с того места, где остановился ранее.
В нашем примере функция numberGenerator является генератором, который создает последовательность чисел от 1 до заданного предела. Когда вы запускаете этот код, он выведет: 1 2 3 4 5.
Преимущества использования генераторов:
Экономия памяти: Генераторы не загружают все значения в память сразу, что позволяет работать с большими объемами данных.
Ленивые вычисления: Генераторы используются по мере необходимости, что позволяет выполнять ленивые вычисления только для запрошенных значений.
Удобство работы с большими данными: Позволяют обрабатывать большие наборы данных пошагово без необходимости загрузки их полностью в память.
Библиотека собеса по PHP
Что такое генераторы и как их использовать?
В PHP генераторы —
это специальный тип итератора, который позволяет создавать итераторы по требованию. Они предоставляют удобный способ работы с большими наборами данных, не загружая их все в память сразу. Генераторы помогают оптимизировать использование памяти и улучшают производительность в случаях, когда нам нужно обработать большой объем данных пошагово.
Генераторы создаются с использованием ключевого слова yield. Когда функция с yield возвращает значение, она «замораживается» на этом месте, сохраняя свою текущую структуру и состояние. Когда генератор запрашивает следующий элемент, он продолжает выполнение функции с того места, где остановился ранее.
В нашем примере функция numberGenerator является генератором, который создает последовательность чисел от 1 до заданного предела. Когда вы запускаете этот код, он выведет: 1 2 3 4 5.
Преимущества использования генераторов:
Экономия памяти: Генераторы не загружают все значения в память сразу, что позволяет работать с большими объемами данных.
Ленивые вычисления: Генераторы используются по мере необходимости, что позволяет выполнять ленивые вычисления только для запрошенных значений.
Удобство работы с большими данными: Позволяют обрабатывать большие наборы данных пошагово без необходимости загрузки их полностью в память.
Библиотека собеса по PHP
Расскажите о целесообразности применения redis / memcached для кэширования. Какие плюсы и минусы?
Использование Redis или Memcached для кэширования — это общепринятая практика в веб-разработке и может предоставить несколько преимуществ.
Плюсы:
1. Ускорение работы приложения: Как кэш-серверы, Redis и Memcached хранят данные в оперативной памяти, что значительно ускоряет чтение и запись данных. Они могут быть использованы для кэширования запросов к базе данных, результатов тяжелых расчетов или рендеринга представлений, что помогает снизить время отклика приложения.
2. Масштабируемость: Redis и Memcached могут быть легко масштабированы по горизонтали, добавляя дополнительные серверы для распределения нагрузки. Это позволяет активно использовать гораздо больше ресурсов, чем один сервер может предоставить.
3. Постоянность данных: Redis позволяет сохранять данные на диске, что гарантирует их сохранность и после перезапуска сервера. Это важно, если важно избежать потери кэшированных данных.
4. Поддержка структурированных данных: Redis предлагает не только простое кэширование простых строковых значений, но и поддерживает сложные структуры данных, такие как списки, хэши и наборы. Это полезно при работе с данными, которые должны быть организованы в определенном порядке или для решения сложных задач.
5. Полезные функции: Кроме возможности кэширования, Redis и Memcached предлагают различные функции, которые могут быть полезными в разработке, такие как публикация/подписка, блокирующее чтение данных и транзакции.
Минусы:
1. Ограничение доступности: Поскольку данные хранятся в оперативной памяти, Redis и Memcached могут оказаться недоступными в случае перезапуска или сбоя сервера. Это означает, что при использовании их в качестве кэша, ваше приложение должно быть готово обрабатывать ситуации, когда кэш недоступен.
2. Ограничение места хранения: В отличие от баз данных, память Redis и Memcached ограничена объемом физической памяти на сервере. Если ваше приложение требует очень большой памяти для хранения данных, может потребоваться использование дополнительных серверов или другой подход к кэшированию.
3. Отсутствие типов данных: Memcached предлагает только возможность кэширования простых строковых данных, в то время как Redis поддерживает структурированные данные. Если вам необходимо хранить сложные данные или использовать сложные запросы, Redis может оказаться предпочтительнее.
4. Сложность настройки: Настройка Redis и Memcached может быть немного сложной для начинающих разработчиков. Вам необходимо правильно настроить экземпляры серверов, определить логику кэширования и обрабатывать ситуации, когда кэш недоступен. Это может потребовать определенного уровня знаний и опыта.
Библиотека собеса по PHP
В чем разница между == и === в контексте работы с объектами?
В контексте работы с объектами в PHP операторы == и === ведут себя по-разному:
🔹 == (нестрогое сравнение)
Проверяет, имеют ли два объекта одинаковые свойства и значения.
Не учитывает, являются ли они одним и тем же экземпляром.
Если объекты имеют одинаковые свойства с одинаковыми значениями, но это разные экземпляры, оператор == вернёт true.
🔹 === (строгое сравнение)
Проверяет, являются ли объекты одним и тем же экземпляром (сравнивает ссылки на память).
Если два объекта являются разными экземплярами, даже если у них одинаковые свойства и значения, оператор === вернёт false.
Расскажите о целесообразности применения redis / memcached для кэширования. Какие плюсы и минусы?
Использование Redis или Memcached для кэширования — это общепринятая практика в веб-разработке и может предоставить несколько преимуществ.
Плюсы:
1. Ускорение работы приложения: Как кэш-серверы, Redis и Memcached хранят данные в оперативной памяти, что значительно ускоряет чтение и запись данных. Они могут быть использованы для кэширования запросов к базе данных, результатов тяжелых расчетов или рендеринга представлений, что помогает снизить время отклика приложения.
2. Масштабируемость: Redis и Memcached могут быть легко масштабированы по горизонтали, добавляя дополнительные серверы для распределения нагрузки. Это позволяет активно использовать гораздо больше ресурсов, чем один сервер может предоставить.
3. Постоянность данных: Redis позволяет сохранять данные на диске, что гарантирует их сохранность и после перезапуска сервера. Это важно, если важно избежать потери кэшированных данных.
4. Поддержка структурированных данных: Redis предлагает не только простое кэширование простых строковых значений, но и поддерживает сложные структуры данных, такие как списки, хэши и наборы. Это полезно при работе с данными, которые должны быть организованы в определенном порядке или для решения сложных задач.
5. Полезные функции: Кроме возможности кэширования, Redis и Memcached предлагают различные функции, которые могут быть полезными в разработке, такие как публикация/подписка, блокирующее чтение данных и транзакции.
Минусы:
1. Ограничение доступности: Поскольку данные хранятся в оперативной памяти, Redis и Memcached могут оказаться недоступными в случае перезапуска или сбоя сервера. Это означает, что при использовании их в качестве кэша, ваше приложение должно быть готово обрабатывать ситуации, когда кэш недоступен.
2. Ограничение места хранения: В отличие от баз данных, память Redis и Memcached ограничена объемом физической памяти на сервере. Если ваше приложение требует очень большой памяти для хранения данных, может потребоваться использование дополнительных серверов или другой подход к кэшированию.
3. Отсутствие типов данных: Memcached предлагает только возможность кэширования простых строковых данных, в то время как Redis поддерживает структурированные данные. Если вам необходимо хранить сложные данные или использовать сложные запросы, Redis может оказаться предпочтительнее.
4. Сложность настройки: Настройка Redis и Memcached может быть немного сложной для начинающих разработчиков. Вам необходимо правильно настроить экземпляры серверов, определить логику кэширования и обрабатывать ситуации, когда кэш недоступен. Это может потребовать определенного уровня знаний и опыта.
Какие основные отличия PHP-FPM от модульного PHP в Apache?
Основные отличия PHP-FPM и модульного PHP в Apache (mod_php):
1. Способ работы и исполнения кода
PHP-FPM (FastCGI Process Manager)
🔸Запускается как отдельный процесс и обрабатывает запросы через протокол FastCGI.
🔸Веб-сервер (Apache, Nginx, Caddy и др.) передает запросы PHP-FPM через сокет или TCP.
🔸PHP-код выполняется в отдельных процессах, не зависящих от веб-сервера.
mod_php (Apache Module)
🔸PHP встраивается в сам Apache в виде модуля.
🔸Код выполняется внутри самого веб-сервера без необходимости передавать запросы во внешний процесс.
🔸Работает только с Apache, не совместим с Nginx.
2. Производительность и ресурсы
PHP-FPM:
✅ Лучше масштабируется, так как поддерживает динамическое управление процессами.
✅ Можно настроить пулы воркеров с разными конфигурациями (например, разное количество процессов для разных сайтов).
✅ Меньше потребляет память, так как процессы PHP разделены от веб-сервера.
❌ Небольшой оверхед на передачу запросов между веб-сервером и PHP-FPM.
mod_php:
✅ Обрабатывает PHP быстрее внутри Apache, без передачи данных во внешний процесс.
✅ Простая настройка, так как PHP уже встроен в сервер.
❌ Занимает больше оперативной памяти, так как каждый Apache-процесс содержит PHP-интерпретатор.
❌ Плохо масштабируется: каждый запрос создает новый процесс Apache, что быстро потребляет ресурсы.
3. Гибкость и настройки
PHP-FPM:
🔹Позволяет задать разные настройки PHP для разных виртуальных хостов (пулы процессов).
🔹Можно легко использовать разные версии PHP на одном сервере.
🔹Гибкие настройки управления процессами (pm.dynamic, pm.max_children и т. д.).
mod_php:
🔹Одна конфигурация PHP для всего сервера.
🔹Нет гибкого управления процессами (сколько процессов запущено — контролирует Apache).
4. Безопасность
PHP-FPM:
Запускает процессы от разных пользователей (разграничение прав между сайтами).
Уменьшает риск исполнения чужого кода на общем сервере.
mod_php:
Все PHP-скрипты работают от имени одного пользователя (обычно www-data или apache).
В многосайтовой среде сайты могут получить доступ друг к другу.
5. Поддержка серверов
PHP-FPM: Работает с Apache, Nginx, Caddy и другими серверами.
mod_php: Работает только с Apache.
📌 Вывод: что выбрать?
Если нужен Nginx, масштабируемость, безопасность и гибкость → PHP-FPM.
Если нужен простой и быстрый запуск PHP на Apache, без сложных настроек → mod_php (но для продакшена редко используется).
PHP-FPM — более современное и предпочтительное решение для большинства проектов. 🚀
Офер от Сбера за один клик 💼
Мечтаешь работать в Сбере, теперь это проще, чем когда-либо!
💡 AI-интервью за 15 минут – и ты уже на шаг ближе к своей новой работе.
Как получить офер?
📌 Зарегистрируйся
📌 Пройди AI-интервью
📌 Получи обратную связь сразу же!
После прохождения твои ответы получат рекрутеры и свяжутся с тобой в течение нескольких дней! 🚀
Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzqxS96Na
Что такое область запросов(query scope) в Laravel и как она используется?
Область запросов в Laravel — это способ инкапсуляции многократно используемой логики запросов в модели. Определяя области запросов, мы можем сделать наши модели более выразительными и удобными в работе. Области запросов — это, по сути, готовые запросы, которые можно применить в конструкторе запросов модели.
Чтобы определить область запросов в Laravel, мы создаем публичный метод в модели, который возвращает экземпляр конструктора запросов. Затем мы можем использовать эту область в запросе, вызвав метод на модели.
Что такое микросервисная архитектура?
Микросервисная архитектура — это подход к разработке программного обеспечения, в котором приложение разбивается на небольшие, автономные и слабо связанные между собой сервисы, каждый из которых отвечает за конкретную функциональность. Эти сервисы взаимодействуют друг с другом посредством использования API, что позволяет им работать независимо друг от друга.
При использовании микросервисной архитектуры, каждый сервис может быть написан на разных языках программирования, иметь свою собственную базу данных и даже развертываться на отдельных серверах. Это позволяет достичь высокой гибкости, масштабируемости и возможности независимого развертывания и сопровождения каждого сервиса.
Преимущества микросервисной архитектуры включают легкость поддержки и развертывания, возможность параллельной разработки и обновления, улучшенную масштабируемость и реактивность системы, а также лучшую изоляцию и отказоустойчивость приложения.
Что вы знаете о дескрипторах в Symfony?
В Symfony дескрипторы используются для преобразования объектов и связанной с ними метаданных в различные форматы вывода, такие как текст, XML или JSON. Дескрипторы особенно полезны для отображения информации в консольных командах, генерации документации API или предоставления метаданных в различных форматах для других целей.
Назначение и использование
Дескрипторы в Symfony помогают разработчикам представлять подробную информацию об объектах (например, о командах, маршрутах, сервисах, событиях и т. д.) в согласованном и структурированном виде. Это особенно полезно, когда нужно предоставить читаемый человеком вывод или данные, понятные для машин.
Распространенные случаи использования
✔️Консольные команды: Когда вы выполняете консольную команду Symfony с опцией --help, дескрипторы используются для форматирования и отображения текста справки по команде.
✔️Информация о маршрутизации: Дескрипторы могут использоваться для отображения информации о маршрутизации в различных форматах.
✔️Информация о сервисах: Они также могут описывать сервисы в контейнере сервисов.
Основные компоненты
DescriptorInterface: Этот интерфейс определяет контракт для дескрипторов. Любой дескриптор должен реализовать этот интерфейс и его метод describe.
AbstractDescriptor: Это абстрактный класс, который реализует некоторую общую логику для дескрипторов. Он помогает уменьшить дублирование кода среди различных реализаций дескрипторов.
Специфические дескрипторы: Symfony предоставляет несколько встроенных дескрипторов, таких как:
🟢TextDescriptor
🟢XmlDescriptor
🟢JsonDescriptor
🟢MarkdownDescriptor
Расширение дескрипторов
Если встроенные дескрипторы не удовлетворяют вашим потребностям, вы можете создать собственные дескрипторы, реализовав DescriptorInterface. Это позволит вам адаптировать вывод под ваши конкретные требования.
Что такое планировщик задач в Laravel и как он используется?
В Laravel планировщик задач — это функция, которая позволяет управлять запланированными задачами на вашем сервере внутри вашего приложения Laravel. Он предоставляет чистый, плавный API для определения ваших запланированных задач простым и удобным способом.
Вот как вы можете использовать его:
Определение запланированных задач: Вы можете определить все свои запланированные задачи в методе schedule класса App\Console\Kernel.
Запуск планировщика задач: Чтобы запустить планировщик Laravel, вам нужно добавить следующую запись Cron на ваш сервер.
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
Этот Cron будет вызывать команду планировщика Laravel каждую минуту для выполнения запланированных задач.
Помните, что будут выполняться только задачи, которые должны быть выполнены. Команда schedule:run будет проверять расписание задач и выполнять все задачи, которые должны быть выполнены.
Ограничения задач: Вы также можете добавить дополнительные ограничения к расписанию, такие как ->weekdays(), ->sundays(), ->at('13:00') и т.д.
Вывод задач: По умолчанию вывод запланированных задач будет направлен в /dev/null. Вы можете использовать методы sendOutputTo и appendOutputTo для записи или добавления вывода в определенный файл.Что такое Redis?
Redis — это высокопроизводительная система управления базами данных и кэширования, которая используется для хранения данных в формате ключ-значение. Она является ключевым инструментом в мире веб-разработки и приложений больших данных.
Тип данных:
Redis поддерживает различные типы данных, включая строки, хеш-таблицы, списки, наборы и упорядоченные наборы. Это позволяет разработчикам выбирать наиболее подходящий тип данных для конкретной задачи.
Скорость:
Redis славится своей высокой производительностью благодаря тому, что он хранит все данные в памяти, а не на диске. Это обеспечивает быстрый доступ к данным и делает Redis одним из самых быстрых инструментов кэширования.
Атомарные операции:
Redis поддерживает атомарные операции, что означает, что множество операций можно объединить в одну, гарантируя целостность данных. Например, увеличение значения ключа на определенную величину — это атомарная операция.
Поддержка различных структур данных:
Благодаря различным типам данных, Redis идеально подходит для различных сценариев использования, начиная от кэширования данных и заканчивая реализацией очередей сообщений и управлением счетчиками.
Мультипоточность:
Redis однопоточный по своей природе, но благодаря асинхронным запросам и многозадачности операционных систем, он способен обрабатывать тысячи запросов в секунду без потери производительности.
Поддержка транзакций:
Redis поддерживает транзакции, что позволяет группировать несколько операций в одну транзакцию и обеспечивать атомарность выполнения всех операций внутри транзакции.
Сохранение данных на диск:
Redis имеет возможность периодически сохранять данные на диск, обеспечивая устойчивость данных даже в случае перезапуска системы.
В общем, Redis — это мощный и гибкий инструмент, который позволяет разработчикам создавать быстрые и масштабируемые приложения, оптимизировать производительность и обеспечивать устойчивость данных.
Какие магические методы вы знаете и как их применяют?
__construct(): Конструктор класса, вызывается при создании нового объекта класса.
__destruct(): Деструктор класса, вызывается при уничтожении объекта.
__call($name, $arguments): Вызывается, когда обращаются к неопределённому методу в контексте объекта.
__callStatic($name, $arguments): Аналогично __call, но для статических методов.
__get($name): Вызывается при чтении данных из недоступных свойств.
__set($name, $value): Вызывается при записи данных в недоступные свойства.
__isset($name): Вызывается при использовании isset() или empty() на недоступных свойствах.
__unset($name): Вызывается при использовании unset() на недоступном свойстве.
__sleep(): Вызывается при сериализации объекта.
__wakeup(): Вызывается при десериализации объекта.
__toString(): Метод для представления объекта в виде строки.
__invoke(): Вызывается при попытке вызвать объект как функцию.
__set_state($array): Вызывается для классов, экспортируемых функцией var_export().
__clone(): Вызывается при клонировании объекта.
__debugInfo(): Используется при выводе объекта функцией var_dump().
👉 Интенсив «Архитектуры и шаблоны проектирования» для middle и senior-разработчиков
Проверьте свои знания, ответив на 8 вопросов – https://proglib.io/w/ed691f3f
🧐 Кому подойдет?
Разработчикам, которые знают любой объектно-ориентированный язык программирования и хотят углубиться в архитектурные паттерны.
🎮 Как проходит обучение?
В течение всего интенсива вы будете создавать игру «Звездные войны» и применять ключевые архитектурные паттерны. В процессе изучите:
– Как строить гибкую архитектуру, которая не замедляет разработку
– Как применять IoC-контейнеры и писать модульные тесты
– Как использовать SOLID за пределами ООП
– Как внедрять CI/CD и снижать технический долг
👉 Подробная программа обучения
А по промокоду MIDDLE до 28 февраля вы получите дополнительную скидку на обучение
Как использовать кэширование в Laravel?
Кэширование в Laravel — это мощная функция, которая может значительно улучшить производительность вашего веб-приложения за счет хранения часто используемых данных в кэше.
1. Конфигурация: Сначала убедитесь, что ваше приложение Laravel правильно настроено для кэширования. Файл конфигурации находится в config/cache.php, где вы можете указать драйвер кэша по умолчанию и другие параметры. Laravel поддерживает различные драйверы кэша, такие как file, database, redis, memcached и другие.
2. Хранение данных в кэше: Вы можете хранить данные в кэше, используя фасад Cache или вспомогательную функцию cache(). Например, чтобы сохранить значение в кэше на 10 минут, вы можете использовать:
Cache::put('key', 'value', 600);
3. Извлечение данных из кэша: Чтобы получить данные из кэша, вы можете использовать метод get:
$value = Cache::get('key');
// или используя вспомогательную функцию
$value = cache('key');
4. Проверка наличия данных: Перед извлечением данных вы можете проверить, существуют ли они в кэше:
Cache::has('key');
5. Удаление данных из кэша: Чтобы удалить данные из кэша, используйте метод forget:
Cache::forget('key');
6. Очистка всего кэша: Если вам нужно очистить весь кэш, вы можете использовать метод flush:
Cache::flush();Объясните задачи, выполняемые контроллером, и определите правила для создания методов в контроллере в Symfony?
В Symfony контроллер является важной частью архитектуры MVC (Model-View-Controller). Он отвечает за обработку HTTP-запросов и возврат HTTP-ответов. Ниже мы рассмотрим задачи, выполняемые контроллером, и правила создания методов в нем:
Задачи, выполняемые контроллером Symfony:
1. Прием запросов: Контроллеры начинают работу с приема HTTP-запроса.
2. Выполнение логики приложения: Они содержат логику, которая определяет, что происходит при переходе по URL. Это может быть запрос к базе данных, обработка данных формы или вызов других сервисов.
3. Создание ответов: После обработки запроса контроллеры создают и возвращают объект Response. Этим ответом может быть HTML-страница, JSON, XML, загрузка файла, перенаправление, ошибка 404 или что-либо еще, что приложение должно вернуть клиенту.
Правила создания методов в контроллере Symfony:
✔️Соглашение об именовании: Методы внутри класса контроллера часто называют «действиями». По традиции имена методов заканчиваются на 'Action', хотя в последних версиях Symfony это не является обязательным.
✔️Возвращение ответов: Каждое действие должно возвращать объект Response. Если вы не возвращаете Response напрямую, то, скорее всего, вы используете вспомогательный метод, например $this->render(), который в конечном итоге возвращает Response.
✔️Доступ к сервисам: Контроллеры имеют доступ к контейнеру сервисов, что означает, что вы можете использовать инъекцию зависимостей для доступа к сервисам в ваших методах.
✔️Сопоставление маршрутов: Каждый метод контроллера должен быть сопоставлен с маршрутом. Это можно сделать с помощью аннотаций, YAML, XML или PHP-файлов. Аннотации — это распространенный способ определения маршрутов непосредственно над методами контроллера.
✔️Аргументы метода: Вы можете вводить аргументы в методы контроллера для автоматической инъекции сервисов или параметров, например Request $request или UserInterface $user.
✔️Лучшие практики: Следуйте правилу 5-10-20: определяйте не более 5 переменных, содержите не более 10 действий и включайте не более 20 строк кода в каждое действие.
