Laravel有一种方法可以为请求数组添加值

时间:2016-05-09 04:49:14

标签: php laravel

我在Laravel中遇到一种情况,同时使用Request参数调用store()或update()方法,以便在调用Eloquent函数之前为请求添加一些额外的值。

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

15 个答案:

答案 0 :(得分:92)

通常,您不希望向Request对象添加任何内容,最好使用collection和put() helper:

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

或者你可以union arrays

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

但是,如果您真的想要向Request对象添加内容,请执行以下操作:

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

答案 1 :(得分:35)

参考$request->request->add(['variable', 'value']); 回答:

在使用他的答案时,我不得不直接向Request Object添加内容并使用:

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

使用它可以添加两个变量:

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

如果你是像我这样的新手,你需要一个关联阵列,正确的方法是

@Alexey

希望我节省了你的时间

PS:谢谢你BOOK bookToRemove = db.BOOKs.Find(bookObj.ISBN); db.BOOKAUTHORS.Remove(db.BOOKAUTHORS.Where(ba => ba.BookId == bookToRemove.Id)); ,你真的帮助我解答了你的答案

答案 2 :(得分:16)

我在Laravel 5.2中尝试了$request->merge($array)函数,它运行良好。

示例:

$request->merge(["key"=>"value"]);

答案 3 :(得分:13)

在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());
}

答案 4 :(得分:8)

您也可以使用以下代码

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

适合我。

答案 5 :(得分:2)

要将ex:newParam的新参数添加到当前Request对象,您可以执行以下操作:

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

添加新参数后,您可以通过以下方式在Request对象中看到这个新添加的参数:

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

答案 6 :(得分:1)

我使用此代码为我的请求添加了一些内容。

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

答案 7 :(得分:1)

您可以使用$request['key'] = 'value'直接访问请求数组;

答案 8 :(得分:1)

我使用过并研究过的最好的软件是 $ 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行。

答案 9 :(得分:1)

你可以使用 laravel helper 和 request() 魔法方法...

request()->request->add(['variable1'=>'value1','variable2'=>'value2']);

答案 10 :(得分:0)

在这个问题上已经足够说了,但是我无法拒绝添加自己的答案。我相信最简单的方法是

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

答案 11 :(得分:0)

基于我的观察

$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 方法时,您可以声明 Request 并直接为其赋值。如下所示:

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

或者您可以使用merge。这实际上比$request->request->add(['variable' => 'value']);更好,因为可以初始化 add 请求可以在所有方法( GET POST PUT 删除

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

标签: laravel5.8.11

答案 12 :(得分:0)

您可以通过以下操作将参数添加到中间件的请求中:

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

答案 13 :(得分:0)

如果你想给Request对象添加一个查询参数,可以通过调用获取

$request->get('key') 

$request->all()

以下对我来说效果很好。

$request->query->set('key','value');

答案 14 :(得分:-1)

$request->offsetSet(key, value);