В этом вопросе я прошу совета «лучшей практики» для Laravel.
Я работаю над сайтом «airbnb-like», где я перечисляю номера. На разных страницах сайта (backend и frontend) мне нужно рассчитать цену за проживание. Цена рассчитывается путем объединения объекта размещения с поисковым запросом.
Например.
-Размещения: ставка = 50 евро за ночь
-Поиска запроса: 4 ночей
-> результата: общая цена = 200 евро
Где я должен поставить логику, что делает эти вычисления цен?
Например:
-Можно ли создать для этого PriceController?
-Можно ли добавить функции/методы в HousingController, которые вычисляют это, или к модели размещения?
-Можно ли создать ServiceProvider для этого?Где я должен поместить логику расчета цены в Laravel?
ответ
Не существует определенного способа снять это, что, на мой взгляд, является величайшей вещью в ларавеле.
Возможно, создайте каталог с именем Calculations
в app/
(app/Caclulations/Accommodation.php
), а имейте это пространство как таковое? Это был бы хороший объектно-ориентированный подход к этой проблеме.
namespace App\Calculations;
class Accommodation
{
/**
* The rate per night.
*
* @var float
*/
protected $rate;
/**
* The amount of nights for the stay.
*
* @var int
*/
protected $nights = 1;
/**
* Constructor.
*
* @param float $rate
* @param int $nights
*/
public function __construct($rate = 50.00, $nights = 1)
{
$this->rate = $rate;
$this->nights = $nights;
}
/**
* Calculates the accommodation and returns the result.
*
* @return float
*/
public function calculate()
{
return $this->rate * $this->nights;
}
}
Таким образом, вы можете изменить класс вычислений при изменении расчетов, продлить его от других расчетов (например, расчета базового), а может вставить некоторые другие полезные вещи в классе, такие как тип валюты.
Использование:
$total = (new Accommodation($rate, $nights))->calculate();
Реально говоря, вы хотите эту логику в нескольких контроллерах. В связи с этим нет смысла повторять эту логику в нескольких контроллерах.
Я бы создал поставщика услуг. С этим вы можете использовать dependancy injection
, чтобы использовать эту логику там, где вам нужно. Имея эту логику в одном месте, вы упрощаете обслуживание &.
Это зависит от того, что вы пытаетесь получить. Если вы считаете, что это разовый расчет, т. Е. вам не нужно использовать этот расчет вне этого метода, нормально с ним идти. В противном случае, если вы считаете, что вам придется использовать эту логику вычислений вне/в других контроллерах/классах, вы можете записать этот файл как метод или создать класс-помощник, содержащий ваш метод. Тебе решать.
- 1. Где я должен поместить логику в макеты вкладки Java
- 2. PHP MVC: Где я должен поместить логику поиска модели?
- 3. Где я могу поместить модульную логику?
- 4. Где я могу поместить логику форматирования?
- 5. Где я могу поместить свою логику отображения?
- 6. Где я должен поместить Database.EnsureCreated?
- 7. Где я должен поместить scriptmanager
- 8. Где я должен поместить маршрут
- 9. Где разместить логику аутентификации в Laravel?
- 10. где поместить фильтр как логику в JSF2
- 11. Laravel, где разместить логику для файла app.blade.php?
- 12. Где я могу поместить логику кодирования в приложение React Application
- 13. Где я могу поместить логику моей программы MFC?
- 14. Где разместить логику Laravel Listener
- 15. Где поместить логику для данных таблицы
- 16. Где я могу поместить логику отображения (а не контроллер)?
- 17. Где я должен поместить диспетчеров данных
- 18. Где я должен поместить интерфейсы для MEF?
- 19. Где я должен поместить код AutoLayout?
- 20. Где я должен поместить свой код инициализации?
- 21. Где я должен поместить свои дефолты?
- 22. Где я должен разместить логику аутентификации в мобильном приложении MVVM?
- 23. Где я должен поместить файл phpdoc.xml?
- 24. Rails: Где я должен поместить этот метод?
- 25. Где я должен поместить метод close()?
- 26. Где я должен поместить свои тесты JUnit?
- 27. git - где я должен поместить папку .git?
- 28. Где я должен поместить свой Partial View
- 29. Где я должен поместить IBOutlets и IBActions?
- 30. Где я должен поместить свой код JavaScript?
Привет Стив, это кажется хорошим решением. Я создал класс для расчета цены, который принимает экземпляр проживания и экземпляр поискового запроса. Я привязываю этот класс к приложению и вызываю его так: '' '$ bookData = App :: make ('PriceCalc', [$ accommodation, $ searchData])' ''. Тогда все методы доступны мне так: '' '$ bookData-> totalPrice()' '' и т. Д. Вам это кажется хорошо? – SiteHopper
Привет @SiteHopper, это кажется прекрасным, но на мой взгляд, нет необходимости связывать класс с самим приложением и вызывать метод 'App :: make()' в классе вычислений. Если вам известен класс и аргументы, необходимые для его построения, вы можете также создать экземпляр самостоятельно, используя '$ bookData = new PriceCalc ($ accomodation, $ searchData);'. Но в итоге все зависит от вас!:) –
Спасибо за подсказку. Я немного смущен об использовании привязки класса к приложению. Когда это будет уместно? – SiteHopper