Как передать переменную из блейд-файла в контроллер в laravel? - PullRequest
1 голос
/ 24 апреля 2020

У меня есть 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 голосов
/ 24 апреля 2020
  1. Вы не можете напрямую установить id модели, как вы делаете в строке $bid->id = $project_id;. Вы пытаетесь установить отношения? Это должно быть больше похоже на $bid->project_id = $request->project_id;.
  2. Шаблоны блейдов не могут действительно передавать данные обратно в контроллеры, после того, как они в браузере, ваше приложение как будто закончило работу. Вам нужно создать ссылку / запрос HTML на странице (например, запрос формы сообщения), который будет запрашивать следующую вещь из вашего приложения, когда пользователь щелкнет по ней.

Если вы хотите создать кнопку, которая создает новую ставку для существующего проекта, вы можете сделать что-то вроде создания формы со скрытым полем «project_id», которое отправляет обратно в «/ bids», которое идет по маршруту «bids.store». Вы найдете 'project_id' в $request->project-id'.

0 голосов
/ 24 апреля 2020

Я думаю, что это решит вашу проблему:

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);        
}
0 голосов
/ 24 апреля 2020

Вы можете отправить AJAX запрос от Javascript:

Просмотр

<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>

Это отправит данные на контроллер асинхронно, так что пользователь на опыт не влияют.

Еще один момент: в вашем контроллере ставок, поскольку project_id приходит из запроса, вам придется использовать:

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

Я надеюсь, это помогает!

PS: я использую JQuery для этого, поэтому вам придется включить его, если у вас его еще нет.

...