【问题标题】:How can I pass variables from one function to another function that already has a $request argument(In the same controller)如何将变量从一个函数传递到另一个已经有 $request 参数的函数(在同一个控制器中)
【发布时间】:2017-05-18 22:45:22
【问题描述】:

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

类 PingController 扩展控制器 {

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 中调用。 php 在第 17 行

有什么建议吗?

【问题讨论】:

    标签: laravel-5.3


    【解决方案1】:

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

    public function getPostAdd(Request $request, $longitude, $latitude){
    
        $this->long = $longitude;
        $this->postForm(request);
        $this->lat = $latitude;
        $this->postForm(request);
        return view('form');
    }
    

    这回答了您的问题,但您的整个实现存在缺陷且非常糟糕。

    【讨论】:

    • 谢谢。我上个月开始使用laravel,这是我的第一个项目,所以请理解。有什么更好的方法来解决它?
    • 如果你给我一个关于你想要达到的目标的简要解释,那么我会指导你
    • 好的。请问如何才能把它移到聊天室呢?
    • 好的,您可以在聊天中留言,我可以在早上检查时为您提供帮助,因为您还没有来。
    • 原来我没有加入聊天所需的声望。但基本上这就是我想要做的:当用户访问网站时,他们会在主页上看到一个按钮。当他们单击按钮时,它会获取他们的位置(经度和纬度)并通过路线将其传递给函数 getPostAdd。然后这个函数返回一个表单,询问一些额外的细节。在表单上收集的用户详细信息及其位置应通过 postForm 函数保存到数据库中。是的,我想先收集他们的位置,然后再收集他们的详细信息,而不是一起收集。
    【解决方案2】:

    这个错误是不言自明的。

    但是,如果您无法将您的$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";
    }
    

    【讨论】:

    • 所以现在应该是这样的: public function postForm() { $request = request(); $ping = 新平(); $ping->longitude = dd($this->long); $ping->纬度 = dd($this->lat); $ping->title = request()->title; $ping->user_id = Auth::user()->id; $ping->description = request()->description; $ping->组织=请求()->组织; Auth::user()->pings()->save($ping);返回“数据库中保存的数据”; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多