我在用户控制器中有这样的存储方法
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对象?
答案 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);