Laravel:如何提交表格并保持相同的观点?

时间:2019-03-09 21:03:57

标签: php laravel forms controller

我在Laravel中有一个已经合并了foreach循环的视图。页面底部是一个小表格。现在,我想发送此表单以将数据保存到数据库中。

同时我想保持相同的观点。如果我在表单中输入同一页面,则会收到错误消息。如果我想通过控制器返回视图,我也会收到错误消息。

在此错误中,先前由另一个控制器传递的循环中数据的输出不再起作用。 -我该怎么办?

  

未定义变量:数据(查看:/srv/users/smartfinance/apps/smartfinance/public/laravel/resources/views/home.blade.php)

struct node_s **t

希望您能理解我的问题,并给我提示如何解决。

这是两个控制器:

free_table()

2 个答案:

答案 0 :(得分:0)

您的错误是您尝试通过两种不同的控制器方法显示同一视图。通常,一个控制器只使用一个视图。其他方法可以重定向到此方法,以便(重新)显示相同的视图。这样,仅在一个地方就需要逻辑为视图检索数据。

class CheckDataController extends Controller
{
    // route 'check.data'
    public function data()
    {
        $data = DB::table('test')->where('booking_date', '=', $today)->get();
        return view('home', compact("data"));
    }
}

class AddContractController extends Controller
{
    // route 'contract.create'
    public function addNewData(Request $request)
    {
        Contract::create($request->input()); // unsafe, only for demonstration...

        return redirect()->route('check.data');
    }
}

如您所见,我们将返回return view('home'),而不是redirect()->route('check.data')。这会将用户重定向到具有已定义路由的其他控制器。当然,这意味着您实际上是在一个用户操作中执行两个控制器方法,但这是常见的做法。

有关重定向的更多信息,请参见official documentation

答案 1 :(得分:0)

给您的建议我的朋友不要通过post方法返回视图。

我认为addNewData()方法是一种来自发布路线的方法。因此,当您在发布方法后返回视图时,不会提供页面数据。因此laravel抛出错误并抱怨缺少变量。因此,您要做的就是重定向到查看该页面的路由。因此,您的方法将如下所示:

public function addNewData(Request $request)
    {
        $bez = $request->bez;
        return redirect('YOUR ROUTE TO VIEW THE PAGE (URL)');
    }