如何从刀片文件向laravel中的控制器传递变量?

时间:2020-04-24 08:40:28

标签: laravel laravel-blade

我有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方法时,我需要帮助。

3 个答案:

答案 0 :(得分:0)

您可以通过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,因此如果您还没有JQuery,则必须包括它。

答案 1 :(得分:0)

  1. 您无法像在id行中那样直接设置模型的$bid->id = $project_id;。您是否要建立关系?那应该更像$bid->project_id = $request->project_id;
  2. 刀片式模板无法真正将它们传递回控制器,一旦它们进入浏览器,您的应用程序即已运行完毕。您需要在页面上创建一个HTML链接/请求(例如表单发布请求),当用户单击该链接/请求时,它会从您的应用中请求下一个内容。

如果您想创建一个按钮来为现有项目创建新的出价,则可以执行类似的操作,例如使用隐藏字段“ project_id”将表单回传到路由的“ / bids” 'bids.store'。您将在$request->project-id'下找到“ project_id”。

答案 2 :(得分:0)

我认为这可以解决您的问题:

ProjectController.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);        
}