【问题标题】:Laravel Edit Function redirectLaravel 编辑函数重定向
【发布时间】:2021-03-01 14:11:51
【问题描述】:

我正在编写一个测验应用程序,我正在尝试向它添加一个编辑功能。通过单击“提交”按钮,我收到错误 Missing required parameters for [Route: quiz/show] [URI: quiz/{quiz}]。 我该如何解决?我是 Laravel 的初学者,如果你能帮助我,那就太好了。

我的网页.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
use App\Http\Controllers\MainController;
use App\Http\Controllers\QuizController;
use App\Http\Controllers\DashboardController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});


Route::middleware(['auth:sanctum', 'verified'])->get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

Route::get('dashboard', 'App\Http\Controllers\DashboardController@index')->name('dashboard');

Route::get('quiz/create', 'App\Http\Controllers\QuizController@create');
Route::post('quiz', 'App\Http\Controllers\QuizController@store');
Route::get('quiz/{quiz?}', 'App\Http\Controllers\QuizController@show')->name('quiz/show');

Route::get('quiz/{quiz}/questions/create', 'App\Http\Controllers\QuestionController@create');
Route::post('quiz/{quiz}/questions', 'App\Http\Controllers\QuestionController@store');
Route::delete('quiz/{quiz}/questions/{question}', '\App\Http\Controllers\QuestionController@destroy');
Route::get('question/edit', '\App\Http\Controllers\QuestionController@edit')->name('question/edit');
Route::patch('question/{question}', '\App\Http\Controllers\QuestionController@update')->name('question/update');

Route::get('startquiz/{quiz}-{slug}', 'App\Http\Controllers\StartQuizController@show');
Route::post('startquiz/{quiz}-{slug}', 'App\Http\Controllers\StartQuizController@store');

我的问题控制器

<?php

namespace App\Http\Controllers;

use App\Models\Question;
use App\Models\Quiz;
use Illuminate\Http\Request;

class QuestionController extends Controller
{
    public function create(Quiz $quiz) {
        return view('question.create', compact('quiz'));
    }

    public function store(Quiz $quiz) {
        $data = request()->validate([
            'question.question' => 'required',
            'answers.*.answer' => 'required',
        ]);

        $question = $quiz->questions()->create($data['question']);
        $question->answers()->createMany($data['answers']);

        return redirect('/quiz/'.$quiz->id);
    }

    public function destroy(Quiz $quiz, Question $question) {
        $question->answers()->delete();
        $question->delete();

        return redirect($quiz->path());
    }
    public function edit(Question $question) {
       return view('quiz.edit', compact('question'));
    }

    public function update(Request $request, Question $question, Quiz $quiz) {
        //$request->validate([
            //'question' => 'required',
        //]);
        $question->update($request->all());
        //dd($quiz);
        return redirect()->route('quiz/show', ['quiz' => $question->quiz])
                        -> with('success', 'Question updated successfully');
    }
}

我的edit.blade

<html>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
    <body>


        <h1>Edit Question</h1>
        <form action="{{ route('question/update',$question->id) }}" method="POST">
            @csrf
            @method('PATCH')

            <div class="container">
                <div class="row justify-content-center">
                    <div class="col-xs-12 col-sm-12 col-md-12">
                            <div class="form-group">
                                <label for="question">Question</label>
                                <input type="text" class="form-control" name="question" value="{{ $question->name }}"placeholder="Enter Question">
                                <small id="questionHelp" class="form-text text-muted">Type in your edited question.</small>
                            </div>
                    </div>
                    <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                        <button type="submit" class="btn btn-primary">Submit</button>
                    </div>
                </div>
            </div>

        </form>


    </body>
</html>

【问题讨论】:

  • 你能检查$quizupdate函数中是否为空
  • @HarpalSingh 我该如何检查?
  • return redirect... 之前打印dd($quiz); 并检查它是否没有空值。如果$quiz 为空,您可以尝试Route::get('quiz/{quiz?}', 'App\Http\Controllers\QuizController@show')-&gt;name('quiz/show'); quiz 作为可选参数。
  • @HarpalSingh 是的,它为空,但使用您的代码仍然无法正常工作

标签: php mysql laravel laravel-8


【解决方案1】:

您的“更新”路线不带任何参数。您的控制器的update 方法看起来像是要使用路由模型绑定,但没有参数,所以您得到一个不存在的Quiz 实例,它没有id,所以它试图使用@987654324 @ 生成 URL 时路由参数不能这样做。

您需要调整您的路由 URI 定义以获取 questionquiz 的参数。也许:

Route::patch('quiz/{quiz}/question/{question}', ...)

如果您不想在测验或问题中使用路由参数,则必须对控制器进行调整以从请求输入中获取信息。

其他快速选项:

您应该能够从问题中得出测验,因此您不需要传递测验:

Route::patch('question/{question}', ...)

public function update(Request $request, Question $question)
{
    $question->update($request->all());

    return redirect()->route('quiz/show', ['quiz' => $question->quiz])
        ->with('success', 'Question updated successfully');
}

【讨论】:

  • 那行不通。我和以前有同样的问题
  • 你的控制器方法的设置方式,你需要路由参数来匹配quizquestion来使用你拥有的代码......如果你想以不同的方式去做也可以做
  • 我和你一样编辑了补丁路由。但是我收到错误Missing required parameters for [Route: question/update] [URI: quiz/{quiz}/question/{question}]. (View: /home/vagrant/code/quizapp/resources/views/quiz/edit.blade.php)我在问题中编辑了我的代码
  • 正确,因为在调用 route 帮助程序以生成 URL 时添加了另一个未传递的参数...尝试更简单的更新,减少更改的内容
  • 还是不行。 Missing required parameters for [Route: question/update] [URI: question/{question}]. (View: /home/vagrant/code/quizapp/resources/views/quiz/edit.blade.php)
猜你喜欢
  • 1970-01-01
  • 2016-11-05
  • 2013-03-23
  • 2021-08-25
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
相关资源
最近更新 更多