Laravel “拉威尔误差”;缺少路线所需的参数“;当我使用带有foreach循环的窗体时

Laravel “拉威尔误差”;缺少路线所需的参数“;当我使用带有foreach循环的窗体时,laravel,foreach,eloquent,Laravel,Foreach,Eloquent,缺少[Route:templates.answers.store][URI:templates/{template}/answers]所需的参数。(视图:D:\Applications\xampp\htdocs\clientpad\resources\views\templates\answers.blade.php) 当我尝试在foreach循环中使用表单时,出现了上述错误。我甚至不知道为什么会发生这种情况,可能是因为我刚到拉雷维尔。但一旦我摆脱了这个错误,它就会消失AnswerControl

缺少[Route:templates.answers.store][URI:templates/{template}/answers]所需的参数。(视图:D:\Applications\xampp\htdocs\clientpad\resources\views\templates\answers.blade.php)

当我尝试在foreach循环中使用表单时,出现了上述错误。我甚至不知道为什么会发生这种情况,可能是因为我刚到拉雷维尔。但一旦我摆脱了这个错误,它就会消失AnswerController@store从雄辩的形式。我可能把整个表格都弄错了

下面是我想做的:一个用户制作了一个带有问题的模板,点击进入这个url的“使用”按钮:{id}/answers,他们会看到他们制作的问题,这些问题会用foreach循环显示。在其周围制作了一个表单,以便用户可以回答所提出的问题。当我删除操作时,表单和答案字段显示AnswerController@store,否则我会得到上面的错误

代码如下:

应答控制器:

    public function index(Template $template, Question $question)
        {
            $questions = $template->questions->mapWithKeys(function($question){
                return [$question->id => $question->question];
            });
            return view('templates.answers')->with('template', $template)->with('questions',$questions);
        }

   public function store(Request $request, Question $question, Answer $answer)
    {
        $answers = new Answer;
        $answers->answer = $request->input('answer');
        $answers->question_id = $request->input('question_id'); //current template id
        $question->answers()->save($answers);
        dd($question);
        return redirect('/dashboard')->with('success', 'Your Question Was Successfully Created');
    }
answers.blade.php

                {!! Form::open(['action' => 'AnswersController@store', 'method' => 'POST']) !!}               
                      @foreach ($questions as $question) <!-- Index counts the questions shown -->

                      <div class="panel panel-default">
                          <div class="panel-body">
                              <p class="pull-left question2"> {{$question}}</p>
                              <div class="form-group answer">

                            {{Form::label('', '')}}
                            {{Form::text('answer', '', ['class' => 'form-control', 'placeholder' => 'Type in your answer'])}}
                                </div>
                          </div>
                        </div>

                    @endforeach
                    <hr>
                         {{Form::submit('Save', ['class'=>'btn btn-primary'])}}
                    {!! Form::close() !!}     
{!!Form::open(['action'=>'AnswersController@store“,”方法“=>”发布“])
@foreach($问题作为$问题)

{{$question}

{{Form::label('',)} {{Form::text('answer','',['class'=>'表单控件','placeholder'=>'在答案中键入']])} @endforeach
{{Form::submit('Save',['class'=>'btn btn primary'])} {!!Form::close()!!}

我只是在路线上使用资源

您正在调用刀片视图中缺少
{id}
参数的路由
templates/{id}/answers
。彻底阅读错误将有助于您理解错误

而不是写:

Form::open(['action'=>'AnswersController@store“,”方法“=>”发布“])

你写道:

Form::open(['action'=>['AnswersController@store“,$template\u id],'method'=>'POST']))


$template\u id
将在有效的路由URL
templates/{id}/answers
中填充
{id}
!我没有意识到我做错了。非常感谢你!虽然你能帮我理解为什么现在答案保存但没有问题的id吗?代码与上面相同。请查看您的
store()
函数。您正在使用您创建的表单中的数据设置
问题\u id
。它完全忽略了URL中的
{id}
。要确认确实存在ID,请检查HTML源代码。无论如何,要使用URL中的ID,您可以向
store()
函数添加另一个参数,如
store($ID…
),然后执行
dd($ID)
,您会发现它是从URL读取的。这是缺少的一点——没有为URL分配ID。因此,在获取问题ID之前,我必须确保商店没有忽略URL中的模板ID吗?我是否能够让它保存他们对应问题的所有4个答案,并且他们的ID带有一个子项麻省理工学院按钮?很抱歉所有的问题,但你很有帮助。事实上,我很困惑。我之前的评论不是100%正确,但至少你理解URL和路线形成之间的关系。如果它现在对你有效…那么没关系,因为你可以保存他们问题ID的所有4个答案。它保存了answer但问题id为空。我不确定为什么我执行dd($question)时,它甚至没有尝试保存问题id,但它确实这样说:0=>“question,template\u id”。它不承认问题id。奇怪的是,这种几乎完全相同的方法适用于不同的表。