Чтобы отличить сохраняющиеся одиночные элементы от тех, которые не сохраняются в Laravel Octane, вам необходимо понять, как Octane обрабатывает экземпляры одиночных элементов и как они разрешаются. Вот ключевые моменты, которые следует учитывать:
Одиночки, которые сохраняются
1. Синглетоны в поставщиках услуг. Синглтоны, которые разрешаются внутри поставщиков услуг, особенно в методах `boot` или `register`, будут сохраняться во всех запросах. Это связано с тем, что эти одиночные элементы разрешаются во время загрузки приложения и сохраняются в кеше контейнера.
2. Теплые службы: вы можете добавить одиночные элементы в «теплый» массив в файле конфигурации Octane, чтобы гарантировать их разрешение и сохранение во время загрузки приложения. Таким образом, эти синглтоны будут доступны для всех запросов.
Синглтоны, которые не сохраняются
1. Синглетоны при обработке запроса: синглтоны, которые разрешаются во время обработки запроса, не сохраняются. Они создаются при каждом запросе и не сохраняются в кеше контейнера.
2. Flush Services: если у вас есть пакет, который регистрирует и разрешает синглтон внутри поставщика услуг, и вы хотите сбрасывать этот экземпляр перед каждым запросом, вы можете добавить его в массив `flush` в файле конфигурации Octane. . Это гарантирует, что синглтон будет удален из контейнера после обработки каждого запроса.
Лучшие практики
1. Используйте обратные вызовы. При регистрации синглтонов используйте обратные вызовы вместо фактического экземпляра, чтобы гарантировать, что они будут обработаны только один раз.
2. Избегайте статических свойств. Избегайте использования статических свойств в синглтонах, поскольку они могут привести к утечкам памяти и сохраняться в разных запросах.
3. Используйте константы: по возможности используйте константы вместо статических свойств, чтобы обеспечить неизменяемость.
4. Экземпляр запроса. При разрешении одиночных элементов передайте обратный вызов, чтобы убедиться, что экземпляр запроса решен правильно.
5. Репозиторий конфигурации: используйте вспомогательную функцию `config()` вместо внедрения репозитория конфигурации, чтобы убедиться, что она решена правильно.
Следуя этим рекомендациям и понимая, как Octane обрабатывает одноэлементные экземпляры, вы можете эффективно управлять и различать сохраняющиеся одиночные элементы от тех, которые не сохраняются в вашем приложении Laravel, работающем на Octane[2][4][5].
Цитаты:[1] https://laracasts.com/discuss/channels/laravel/singletone-not-working-in-laravel
[2] https://divinglaravel.com/laravel-octane-bootstrapping-the-application-and-handling-requests
[3] https://grantwinney.com/difference-between-singleton-scoped-transient/
[4] https://betterprogramming.pub/the-downsides-of-coding-with-laravel-octane-17f4a7a4ea85?gi=d8afa3954408
[5] https://www.prismetric.com/laravel-octane/