Laravel将对象从视图传递到控制器

时间:2016-11-16 21:48:38

标签: php laravel view controller

根据以下3个表格寻找最佳实践:

任务(id,title,description) 用户(id,名称) User_task(user_id,task_id)

我的类/对象用户有一个函数addToCompletedTasks(任务任务),可以将任务添加到已完成任务列表中(将任务添加到表User_task中)。

我正在寻找最佳做法,将我已完成的任务从我的视图发送到我的控制器。 现在我发送了一个ID,但我想知道是否可以发送对象,所以我不必在控制器中实例化任务,将其添加到completedtasks列表中

public function insertCompletedTask(Request $request)
{
        $task_id = $request->input('task_id');

        $user = \Auth::user();

        $task   = Task::whereId($task_id)->first();
        $update = $user->assignCompletedTask($task);
}

2 个答案:

答案 0 :(得分:1)

您必须通过路线发送ID

Route::get('/your-url/{id}', 'YourController@addCompletedTasks');

然后您需要在User模型中声明此函数:

public function tasks(){
    return $this->belongsToMany('Task');
}

然后在你的控制器中有这个功能:

public function addCompletedTasks($id) {
     // if you want to you can also just do 
     Auth::user()->tasks()->attach($id);
}

如果您想在请求中通过POST发送,而不是通过URL中的ID发送,您的功能需要像这样:

public function addCompletedTasks(Request $request) {
  Auth::user()->tasks()->attach($request->get('id'));
}

在任何一种情况下,您都无法发送完整的php对象,或者您必须将其序列化并反序列化,更容易发送ID。

但在我看来,你应首先检查任务是否与id首先相关。但如果您在数据库级别上拥有此控件,那就没问题。

答案 1 :(得分:0)

如果您返回视图,则可以将数据发送回视图,如下所示:

return view('view-name',array('variable_view' => $variable));

您将使用数组中的键作为视图中的变量。并且数组中的值($ variable)是来自控制器的变量。因此,在您的视图中,您将键入$ variable_view并使用$ variable,因此您可以将任务对象发送到视图。

在我看来,我会在视图中使用尽可能少的PHP。