Natknąłem się na sytuację w Laravel podczas wywoływania metody store () lub update () z parametrem Request w celu dodania dodatkowej wartości do żądania przed wywołaniem funkcji Eloquent, czy jest na to jakikolwiek sposób.
function store(Request $request)
{
// some additional logic or checking
User::create($request->all());
}
$request->all()
tablicy?array_add()
pomocnika?$array = array_add($request->all(), 'new_key', $value);
: laravel.com/docs/5.2/helpers#method-array-add Jeśli tego nie szukasz, czy możesz podać więcej informacji na swoje pytanie?Odpowiedzi:
Zazwyczaj nie chcesz niczego dodawać do obiektu Request, lepiej jest użyć kolekcji i
put()
pomocnika:function store(Request $request) { // some additional logic or checking User::create(array_merge($request->all(), ['index' => 'value'])); }
Lub możesz połączyć tablice :
User::create($request->all() + ['index' => 'value']);
Ale jeśli naprawdę chcesz dodać coś do obiektu Request, zrób to:
$request->request->add(['variable' => 'value']); //add request
źródło
Odnosząc się do
Alexey Mezenin
odpowiedzi:Korzystając z jego odpowiedzi musiałem coś dodać bezpośrednio do obiektu Request i użyłem:
$request->request->add(['variable', 'value']);
Używając tego, dodaje dwie zmienne:
$request[0] = 'variable', $request[1] = 'value'
Jeśli jesteś nowicjuszem jak ja i potrzebowałeś tablicy skojarzonej, właściwym sposobem jest to
$request->request->add(['variable' => 'value']);
Mam nadzieję, że zaoszczędziłem ci trochę czasu
PS: Dziękuję
@Alexey
, naprawdę pomogłeś mi w udzieleniu odpowiedziźródło
Model
klasie jako:protected $fillable = ['slug'];
Próbowałem
$request->merge($array)
funkcji w Laravel 5.2 i działa idealnie.Przykład:
$request->merge(["key"=>"value"]);
źródło
wystarczająco dużo powiedziane na ten temat, ale nie mogłem się powstrzymać przed dodaniem własnej odpowiedzi. Uważam, że najprostsze podejście jest takie
request()->merge([ 'foo' => 'bar' ]);
źródło
W laravel 5.6 możemy przekazywać parametry między oprogramowaniem pośredniczącym, na przykład:
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()); }
źródło
$request->merge()
metoda FTW! Dzięki.Możesz również użyć poniższego kodu
$request->request->set(key, value).
Lepiej mi pasuje.
źródło
Aby dodać nowy parametr np.
newParam
Do aktualnegoRequest
obiektu, możesz:$newParam = "paramvalue"; $request->request->add(['newParam' => $newParam]);
Po dodaniu nowego parametru możesz zobaczyć ten nowo dodany parametr do obiektu Request poprzez:
dd($request);//prints the contents of the Request object
źródło
Na podstawie moich obserwacji :
$request->request->add(['variable' => 'value']);
będzie (głównie) działać w metodach POST, PUT i DELETE , ponieważ są przekazywane wartości, jedna z nich jest_token
. Jak przykład poniżej.<form action="{{ route('process', $id) }}" method="POST"> @csrf </form> public function process(Request $request, $id){ $request->request->add(['id' => $id]); }
Ale [poniższy kod] nie zadziała, ponieważ nie ma przekazanych wartości, tak naprawdę nie dodaje.
<a href='{{ route('process', $id) }}'>PROCESS</a> public function process(Request $request, $id){ $request->request->add(['id' => $id]); }
Korzystając z metody GET , możesz zadeklarować żądanie i bezpośrednio przypisać do niego wartości. Jak poniżej:
public function process($id){ $request = new Request(['id' => $id]); }
Lub możesz użyć
merge
. W rzeczywistości jest to lepsze niż$request->request->add(['variable' => 'value']);
ponieważ można zainicjować i dodać wartości żądań, które będą działać dla wszystkich metod ( GET , POST , PUT , DELETE )public function process(Request $request, $id){ $request->merge(['id' => $id]); }
Tag: laravel5.8.11
źródło
Użyłem tego kodu, aby dodać coś do mojej prośby.
$req->query->add(['key'=>'variable']); $req->request->add(['key'=>'variable']);
źródło
Możesz uzyskać bezpośredni dostęp do tablicy żądań za pomocą
$request['key'] = 'value'
;źródło
Najlepszy, z którego korzystałem i badałem, to
$request->merge([])
(Sprawdź mój fragment kodu):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'])); }
Sprawdź wiersz # 3 wewnątrz funkcji indeksu.
źródło
Możesz dodać parametry do żądania z oprogramowania pośredniego, wykonując:
public function handle($request, Closure $next) { $request->route()->setParameter('foo', 'bar'); return $next($request); }
źródło
$request->offsetSet(key, value);
źródło