Я очень новичок в фреймворках Laravel и php в целом, так что извините, если я что-то пропустил. Я создал новую модель под названием Journey
в моем приложении, которое расширяет стандарт Eloquent
модель. Что я заметил, так это то, что я использую свою модель Journey в двух разных контроллерах и из-за этого дублирую немного кода.
По сути, то, что я делаю, это то, что я беру заголовок Journey и форматирую его с помощью пользовательского класса, чтобы очистить заголовок (преобразовать в нижний регистр, добавить дефисы, удалить пробелы и т. Д.), Чтобы я мог добавить его к URL моей страницы.
В один контроллер я звоню:
$journey = Journey::find($id);
$journey->cleanURL = Url::clean($journey['name']); // This creates a new element/property with a clean string
А в другом я звоню
$journeys = Journey::all();
foreach ($journeys as $journey) {
$journey->cleanURL = URL::clean($journey['name']);
}
Было бы неуместно добавлять в мою базу данных фиксированное поле с очищенным URL-адресом, потому что я могу изменить заголовок (на котором основан очищенный URL-адрес) в любое время, и я бы хотел, чтобы URL-адрес автоматически обновлялся в этом случае. Однако, сказав это, я повторяюсь, позвонив Url::clean
дважды.
То, что я хотел бы сделать, это написать метод или изменить существующий метод, чтобы при вызове Journey::all()
или же Journey::find()
или любой метод на основе запроса, поле URL уже присутствует и заполнено. Я пытался просмотреть некоторые из Vendor/Eloquent
файлы, но они просто смущают меня.
Как бы я поступил так?
Ты можешь использовать сбруя за это.
Добавьте к вашему Journey
смоделируйте следующую функцию:
public function getCleanUrlAttribute($value)
{
return Url::clean($this->name);
}
Теперь вы сможете использовать:
$journey = Journey::find($id);
echo $journey->clean_url;
Других решений пока нет …