在laravel 5中将数组转换为Request对象

时间:2016-05-02 05:25:45

标签: php laravel laravel-5 laravel-5.1

我在用户控制器中有这样的存储方法

public function store(Request $request)
{
    User::create($request->all()); 

}

在另一个控制器中我想使用这种方法

 public function test(Request $request)
{
  .....
   app('\App\Http\Controllers\UserController')->store($test_array);
  ...
}

$test_array是:

{"name":"test","email":"test@gmail.com"}

最后告诉我这个错误

  

传递给App \ Http \ Controllers \ UserController :: store()的参数1必须是Illuminate \ Http \ Request的实例,

如何将数组转换为Request对象?

5 个答案:

答案 0 :(得分:10)

只需使用

$request = new Illuminate\Http\Request($test_array);

答案 1 :(得分:7)

使用$request->merge($someArray)

你可以尝试这种方式..

你的第二个控制器的测试方法。

public function test(Request $request)
{
  $another_array = [];
  $another_array['eg'] = $test_array;
  $request->merge($another_array);

  .....
   app('\App\Http\Controllers\UserController')->store($request->get('eg'));
  ...
}

您的$test_array必须属于array

类型

希望这能解决您的问题。

答案 2 :(得分:1)

我认为你不能以这种方式使用store()

如果您从其他地方调用store()操作,则可以将持久逻辑放入模型中:

class User extends Model

    public function storeData($data)
    {
        $createdUser = User::create($data);
        return $createdUser;
    }

然后从store()操作和test()调用此内容。

如果不只是,只需将store()更改为:

public function store($data)
{
    User::create($data); 
}

答案 3 :(得分:1)

  

如何将数组转换为Request对象?

如果您真的想这样做(我不会),那么您就是:

这样的事情应该可以解决问题-我没有对其进行测试:

use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
use Symfony\Component\HttpFoundation\ParameterBag;
use Illuminate\Http\Request as IlluminateRequest;


$symfonyRequest = SymfonyRequest::createFromGlobals();

$symfonyRequest->query = new ParameterBag([
    'foo' => 'bar',
]);

$request = IlluminateRequest::createFromBase($symfonyRequest);

答案 4 :(得分:-2)

为什么不使用闪存会话数据使用重定向?正如Response - Redirecting With Flashed Session Data文档所说:

  

重定向到新的URL并将数据闪烁到会话中   通常在同一时间完成。因此,为方便起见,您可以创建一个   RedirectResponse实例和flash数据在单个会话中   方法链。这对于存储状态特别方便   行动后的消息:

Route::post('user/profile', function () {
    // Update the user's profile...

    return redirect('dashboard')->with('status', 'Profile updated!');
});
  

当然,在用户被重定向到新页面后,您可以   从会话中检索并显示闪烁的消息。对于   例如,使用Blade语法:

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif

因此,在您的情况下,您将存储return redirect('dashboard')->with('user', $userModel);