如何在不使用Laravel中的表单的情况下将变量从视图传递到控制器?

时间:2016-02-19 11:13:53

标签: laravel view controller

我使用RESTful控制器并传递变量(使用表单)在这里工作得很好。

现在由于某种原因,我需要使用简单链接,使用action()@create行动的专用路线创建。

我的视图创建了几个具有不同参数的类似链接:

<a href="{!! action('\App\Http\Controllers\Admin\Franch\Category\SubCategoryController@create', array('mainCategoryName' => $mainCategoryName)) !!}">

它有效,因为我可以在URL中看到这一点:

/create?mainCategoryName=some_sample_name

但是这条路线并没有将变量传递给@create动作,或者控制器没有收到它的理由:

Route::get('admin/franch/sub_categories/create', ['uses' => 'Admin\Franch\Category\SubCategoryController@create');

我想知道如何使用GET和POST方法将变量从视图传递到特定控制器?

这是我的@create控制器:

public function create($mainCategoryName = false)
{
        dd($mainCategoryName);
....

总是给出false

2 个答案:

答案 0 :(得分:2)

您可以在链接和该函数用户Ajax

中创建一个函数
$.ajax({
  type: "POST",//Or Get
  url: url,
  data: {"var_name":variable},
  success: success,
  dataType: dataType
});

现在您可以在数据中发送变量。然后你可以通过以下方式获得控制器中变量的值:

Input::get('var_name');

答案 1 :(得分:1)

如果您在控制器中进行所有“计算”并将结果值传递给视图会更好

class SomeController() extends Controller
{
    public function getView():View
    {
        $mainCategoryName = "fix";
        $formUrl = action('\App\Http\Controllers\Admin\Franch\Category\SubCategoryController@create', array('mainCategoryName' => $mainCategoryName));

        return view('view.show', compact('formUrl'));
    }
...

你的错误是在视图中保留有意义的数据,而视图应该只处理值:

<a href="{!! $formUrl !!}">

如果你真的想“发疯”,你可以创建一个使用刀片视图和控制器数据生成 HTML 的类,然后你可以在控制器中执行这个类,让你的“部分”准备好以 HTML 形式包含在视图中。但反过来不行。将计算排除在您的视图之外。