2015-03-11 3 views
2

Я строю приложение с помощью Laravel 5. У меня есть такой код:Изменить значение поля запроса перед сохранением в Laravel 5

public function store(ArticlesRequest $request, Pages $page) 
{ 

    $parentSlug = Pages::getParentSlug($request->parent_id); 
    $slug = ($request->slug)? $request->slug:$request->generic_title; 
    $validSlug = $request->makeSlug($slug); 
    $request->slug = $validSlug; 

    $page->create($request->all()); 
} 

Я хочу обновить некоторые данные перед сохранением, как слизняк, в этом случае, но он не сохраняет поле пули, если я непосредственно не вхожу из поля формы. Как я могу обновить $ request, содержащий значения элементов? Например $ request-> slug = $ validSlug; и он сохраняет измененный пул в БД. Большое спасибо!

+2

Возможно, вы захотите переместить эту логику в [атрибут-мутатор] (http://laravel.com/docs/5.0/eloquent#accessors-and-mutators) в вашей модели – lukasgeiter

+0

@lukasgeiter. Понятно, как установить и получить атрибуты, когда речь идет о одном поле, но можете ли вы рассказать мне, как я могу объединить два поля ввода с помощью атрибута mutator? Например, у меня есть publish_date и publish_time, которые я вставляю в БД вместе. Спасибо! :) – SomethingElse

+0

На самом деле нет хорошего решения. Вы можете передать массив с обоими значениями, хотя ... Если вам нужна дополнительная помощь, задайте новый вопрос :) – lukasgeiter

ответ

9

Вы можете управлять значениями запроса, как это:

$request->offsetSet('slug', $validSlug); 

Однако я согласен с комментарием выше, было бы гораздо лучше управлять значение по умолчанию внутри вашей модели страницы.

UPDATE: У меня ранее было два метода, один из которых больше не работает с Laravel 5.1 (спасибо @omarjebary). Обновленный ответ.

+2

Или просто используйте '$ request-> offsetSet ('slug', $ validSlug)' – lukasgeiter

+0

Спасибо большое! Оба метода работают отлично! – SomethingElse

+0

getInputSource() - защищенный метод в Laravel 5.1+, поэтому он может быть вызван только экземплярами самого класса Request или классов, которые наследуют его. Метод offset() больше не существует, заменен на offsetSet(), хотя это общедоступно. – omarjebari

Смежные вопросы