如何将变量从一个函数传递给另一个已经具有$ request参数的函数(在同一个控制器中)

时间:2017-05-18 13:56:01

标签: laravel-5.3

请注意我的问题不是如何将变量从一个函数传递到另一个函数。我的问题是,应该接收变量的函数已经有一个' $ request'参数(从一个表单,存储在数据库中,与我想传递给它的变量一起),这会导致它标记错误。

类PingController扩展Controller {

public $long;
public $lat;
public function getPostAdd($longitude, $latitude){

    $this->long = $longitude;
    $this->postForm();
    $this->lat = $latitude;
    $this->postForm();
    return view('form');
}

public function postForm(Request $request){
    $ping = new Ping();
    $ping->longitude = dd($this->long);
    $ping->latitude = dd($this->lat);
    $ping->title = $request->input('title');
    $ping->user_id = Auth::user()->id;
    $ping->description = $request->input('description');
    $ping->organization = $request->input('organization');

    Auth::user()->pings()->save($ping);
    return "Data saved in database";
}

}

它给出了这个错误:

PingController.php第23行中的FatalThrowableError: 类型错误:传递给App \ Http \ Controllers \ PingController :: postForm()的参数1必须是Request的实例,没有给定,在C:\ Users \ CAESAR \ Desktop \ eepme \ app \ Http \ Controllers \ PingController中调用。第17行的PHP

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

错误非常明显。

但是,如果您无法将$request对象传递给postForm函数,则还可以使用全局request()帮助程序检索请求对象。 Documentation

public function postForm()
{
    $ping = new Ping();
    $ping->longitude = dd($this->long);
    $ping->latitude = dd($this->lat);
    $ping->title = request()->title;
    $ping->user_id = Auth::user()->id;
    $ping->description = request()->description;
    $ping->organization = request()->organization;

    Auth::user()->pings()->save($ping);
    return "Data saved in database";
}

答案 1 :(得分:0)

您可以在第一种方法中注入请求对象,并使用它来调用第二种方法。这不会影响您的路线参数。

public function getPostAdd(Request $request, $longitude, $latitude){

    $this->long = $longitude;
    $this->postForm(request);
    $this->lat = $latitude;
    $this->postForm(request);
    return view('form');
}

这回答了你的问题,但你的整个实施都是有缺陷的,而且非常糟糕。