【问题标题】:How do I pass a variable from blade file to controller in laravel?如何将变量从刀片文件传递到 laravel 中的控制器?
【发布时间】:2020-04-24 08:40:28
【问题描述】:

我有ProjectController 从数据库中获取数据并将其传递给刀片文件。数据项之一是project_id。我想将刀片文件中的project _id 传递给另一个控制器BidController

ProjectController.php

public function show($id)
{
    $project = Project::find($id);
    return view('project.show',['project'=>$project]);
}

show.blade.php

div class="card-header">PROJECT <p>{!! $project->id !!}</p></div>

BidController.php

public function store(Request $request)
{
     $bid = new Bid;
     $bid->project_id = $project_id;
     dd($project_id);        
}

dd(); 不输出project_id。我需要帮助将 project_id 从刀片文件传递到 BidController 方法。

【问题讨论】:

  • 您将值传递为postget 方法或ajax request
  • 如果 'project_id' 作为下一个请求的查询字符串的一部分包含在您的应用中,那么您会在 $request-&gt;project_id 下找到它。

标签: laravel laravel-blade


【解决方案1】:
  1. 您不能像在$bid-&gt;id = $project_id; 行中那样直接设置模型的id。你想建立关系吗?那应该更像$bid-&gt;project_id = $request-&gt;project_id;
  2. 刀片模板无法真正将内容传递回控制器,一旦它们在浏览器中,您的应用程序就已经运行完毕。您需要在页面上创建一个 HTML 链接/请求(如表单发布请求),当用户单击它时,它将向您的应用请求下一件事。

如果您想创建一个为现有项目创建新投标的按钮,您可以执行以下操作,例如设置一个带有“project_id”隐藏字段的表单,该表单回发到“/bids”,该字段会转到该路线'出价. 商店'。您会在$request-&gt;project-id' 下找到“project_id”。

【讨论】:

  • 我也这么认为
【解决方案2】:

您可以通过 Javascript 发送AJAX 请求:

查看

<script type="text/javascript"> 
    var project_id= {!! json_encode($project->id) !!}

    $.ajax({
            type: 'POST',
            url: url, //Your bidController route
            data: {project_id: project_id},
            error: function (jqXHR, textStatus, errorThrown) {
                console.log(errorThrown)
            },
            success: function()
            {
                console.log('successful')
            }
        });
</script>

这会将数据异步发送到控制器,因此不会影响用户体验。

还有一点:在您的 Bid 控制器中,由于 project_id 来自请求,您必须使用:

$bid->id = $request->project_id;

希望对你有帮助!

PS:我正在为此使用 JQuery,所以如果你还没有,则必须包含它。

【讨论】:

    【解决方案3】:

    我认为这会解决你的问题:

    项目控制器.php

    public function show($id)
    {
        $project = Project::findOrFail($id);
        return view('project.show',compact('project');
    }
    

    web.php

    Route::post('/bids/store/{id}' , 'BidController@store')->name('bids.store');
    

    show.blade.php

    div class="card-header">PROJECT <p>{{$project->id}}</p></div>
    <form action="{{route('bids.store', $project->id)}}" method="post">
    

    BidController.php

    public function store(Request $request, $id)
    {
         $bid = new Bid;
         $bid->id = $id;
         $bid->save();
         dd($id);        
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2022-01-01
      • 2018-08-15
      • 2017-07-31
      • 2020-12-23
      • 2017-09-03
      相关资源
      最近更新 更多