Laravel - це спосіб додати значення до масиву запитів


114

Я стикаюся з ситуацією в Laravel під час виклику методу store () або update () із параметром Request, щоб додати якесь додаткове значення до запиту перед викликом функцій Eloquent, чи є для цього спосіб.

function store(Request $request) 
{
  // some additional logic or checking
  User::create($request->all());
}

Який тип лікування ви хочете зробити? Ви хочете додати значення ключів до $request->all()масиву?
Hammerbot

Так, мені потрібно додати значення ключа
Віджаяна та Премнат

Ви не можете користуватися array_add()помічником? $array = array_add($request->all(), 'new_key', $value);: laravel.com/docs/5.2/helpers#method-array-add Якщо це не те, що ви шукаєте, чи можете ви надати більше інформації для свого питання?
Hammerbot

$ request - це php-об'єкт, наскільки я розумію, якщо ви хочете додати деякі функції в бічному контролері, перетворіть об'єкт запиту в масив, а потім додайте те, що завгодно,
Chathura Hettiarachchi

Відповіді:


208

Зазвичай ви не хочете нічого додавати до об'єкта Request, краще скористатися колекцією та put()помічником:

function store(Request $request) 
{
    // some additional logic or checking
    User::create(array_merge($request->all(), ['index' => 'value']));
}

Або ви можете об'єднати масиви :

User::create($request->all() + ['index' => 'value']);

Але якщо ви дійсно хочете щось додати до об’єкта Request, зробіть наступне:

$request->request->add(['variable' => 'value']); //add request

3
Так, це працює для мене зараз, я змінив код як сховище функцій (Запит $ запиту) {// деяка додаткова логіка або перевірка $ plan = 123; // деяка логіка для вирішення плану користувача $ request-> request-> add (['plan' => $ plan]); Користувач :: create ($ request-> all ()); }
Віджаяна і Премнат

1
Це не працює, оскільки $ request-> all () - це масив, а не колекція.
kjdion84

1
Думаю, це має бути $ request-> request-> add (['variable' => 'value']);
Сергій Онищенко

$ request-> request-> add ... Я отримав повідомлення про помилку 「Невизначена змінна: request」 Але у мене було 「use Illuminate \ Http \ Request;」 чому я отримав повідомлення про помилку?
Робспін,

Чи потрібно мені $ request = collect (); спочатку? $ Resquest - це колекція чи масив?
Робспін,

59

Посилаючись на Alexey Mezeninвідповідь:

Використовуючи його відповідь, мені довелося додати щось безпосередньо до об’єкта запиту та використати:

$request->request->add(['variable', 'value']);

Використовуючи це, він додає дві змінні:

$request[0] = 'variable', $request[1] = 'value'

Якщо ви новачок, як я, і вам потрібен асоційований масив, правильно зробити це

$request->request->add(['variable' => 'value']);

Сподіваюся, я заощадив твій час

PS: Дякую @Alexey, ви дійсно допомогли мені своєю відповіддю


$ request-> request-> add ... Я отримав повідомлення про помилку 「Невизначена змінна: request」 Але у мене було 「use Illuminate \ Http \ Request;」 чому я отримав повідомлення про помилку?
Робспін,

@robspin Я думаю, що пізно, але ти, мабуть, не вводив запит у функцію Напр.: функція (Запит $ запит)
mushood badulla

1
Для тих з вас, хто шукає, чому ваше значення не вставляється в базу даних, оскільки я не оголосив це значення бази даних у своєму Modelкласі як:protected $fillable = ['slug'];
fWd82


17

досить сказано на цю тему, але я не зміг встояти, щоб додати власну відповідь. Я вважаю, що це найпростіший підхід

request()->merge([ 'foo' => 'bar' ]);

16

У laravel 5.6 ми можемо передавати параметри між проміжними програмами, наприклад:

FirstMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    return $next($request->merge(['key' => 'value']));
}

SecondMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    dd($request->all());
}

1
Цей $request->merge()метод FTW! Дякую.
Martin Joiner,

15

Ви також можете використовувати код нижче

$request->request->set(key, value).

Мені більше підходить.


Принаймні з Laravel 5.6 так це робиться! Чудова відповідь
Rockin4Life33

4

Щоб додати новий параметр для ex: newParamдо поточного RequestОб’єкта, ви можете зробити:

$newParam = "paramvalue";
$request->request->add(['newParam' => $newParam]);

Після додавання нового параметра ви зможете побачити цей нещодавно доданий параметр до об'єкта Request, виконавши:

dd($request);//prints the contents of the Request object

3

На основі моїх спостережень :

$request->request->add(['variable' => 'value']);буде (в основному) працювати в методах POST, PUT & DELETE , оскільки передано значення, одне з них _token. Як приклад нижче.

<form action="{{ route('process', $id) }}" method="POST">
    @csrf
</form>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}

Але [нижченаведений код] не буде працювати, оскільки не було передано значення (значень), це насправді не додає.

<a href='{{ route('process', $id) }}'>PROCESS</a>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}


Використовуючи метод GET, ви можете або оголосити Запит, і призначити йому значення безпосередньо. Як нижче:

public function process($id){
    $request = new Request(['id' => $id]);
}

Або ви можете використовувати merge. Насправді це краще, ніж $request->request->add(['variable' => 'value']);тому, що можна ініціалізувати та додати значення запиту, які працюватимуть для всіх методів ( GET , POST , PUT , DELETE )

public function process(Request $request, $id){
    $request->merge(['id' => $id]);
}

Тег: laravel5.8.11


2

Я використав цей код, щоб додати щось до свого запиту.

$req->query->add(['key'=>'variable']);
$req->request->add(['key'=>'variable']);

2

Ви можете отримати безпосередній доступ до масиву запитів за допомогою $request['key'] = 'value';


2

Найкращий, який я використовував і досліджував на ньому - $request->merge([])(Перевірте мій шматок коду):

public function index(Request $request) {
    not_permissions_redirect(have_premission(2));
    $filters = (!empty($request->all())) ? true : false;
    $request->merge(['type' => 'admin']);
    $users = $this->service->getAllUsers($request->all());
    $roles = $this->roles->getAllAdminRoles();
    return view('users.list', compact(['users', 'roles', 'filters']));
}

Перевірте рядок №3 усередині функції індексу.


0

Ви можете додати параметри до запиту із проміжного програмного забезпечення, виконавши:

public function handle($request, Closure $next)
{
    $request->route()->setParameter('foo', 'bar');
    return $next($request);
}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.