Редирект с созданным идентификатором в Laravel - PullRequest
0 голосов
/ 31 мая 2018

Я следовал нескольким учебникам по CRUD в блогах для Laravel и пытаюсь перейти к следующему шагу, создав веб-сайт рецептов для себя.

Идея состоит в том, что пользователь создает новый рецепт, который содержит таблицы title, description, portions, user_id до recipes.

У меня это работает, и оно успешно сохраняется в БД вместе со связанными tags в recipe_tags таблице.

В настоящее время у меня есть storeControllerперенаправление в представление recipe.show, которое работает нормально, но я пытаюсь заставить его перенаправить в представление steps.create и извлечь title и description издБ и связанные id в таблице recipes.

Вот мой store @ recipesController:

public function store(Request $request)
{
    $this->validate($request, [
      'name' => 'required|max:255',
      'description' => 'required',
      'portions' => 'required'
    ]);

    $recipe = new Recipe;

    $recipe->name = $request->name;
    $recipe->description = $request->description;
    $recipe->portions = $request->portions;
    $recipe->user_id = auth()->user()->id;

    $recipe->save();

    if(isset($request->tags)){
      $recipe->tags()->sync($request->tags, true);
    } else {
      $post->tags()->sync([]);
    }

    return redirect()->route('steps.create', ['id' => $recipe->id]);
}

И это мой create @ stepsController

public function create($id)
{
  $recipe = Recipe::find($id);
  return view('steps.create')->withRecipe($recipe);
}

Но он возвращает следующее:

Type error: Too few arguments to function App\Http\Controllers\StepsController::create(), 0 passed and exactly 1 expected

Я немного не в себе.Я думаю, что это может быть проблема с моими маршрутами (оба из которых Route::resource(...))

Мой запасной вариант - использовать Ajax для записи рецепта и шагов в базу данных на той же странице, но я 'Лучше научиться делать это так, как я планировал изначально.

(РЕДАКТИРОВАТЬ: он перенаправляет на следующий URL-адрес в случае, если это имеет какое-либо значение.)

http://127.0.0.1:8000/steps/create?id=3

Список маршрутов:

    $ php artisan route:list
    +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
    | Domain | Method    | URI                    | Name             | Action                                                                 | Middleware   |
    +--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
    |        | GET|HEAD  | /                      |                  | App\Http\Controllers\PagesController@index                             | web          |
    |        | GET|HEAD  | api/user               |                  | Closure                                                                | api,auth:api |
    |        | GET|HEAD  | home                   | home             | App\Http\Controllers\HomeController@index                              | web,auth     |
    |        | GET|HEAD  | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
    |        | POST      | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
    |        | POST      | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
    |        | POST      | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest    |
    |        | GET|HEAD  | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest    |
    |        | POST      | password/reset         |                  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest    |
    |        | GET|HEAD  | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest    |
    |        | GET|HEAD  | recipes                | recipes.index    | App\Http\Controllers\RecipesController@index                           | web,auth     |
    |        | POST      | recipes                | recipes.store    | App\Http\Controllers\RecipesController@store                           | web,auth     |
    |        | GET|HEAD  | recipes/create         | recipes.create   | App\Http\Controllers\RecipesController@create                          | web,auth     |
    |        | DELETE    | recipes/{recipe}       | recipes.destroy  | App\Http\Controllers\RecipesController@destroy                         | web,auth     |
    |        | PUT|PATCH | recipes/{recipe}       | recipes.update   | App\Http\Controllers\RecipesController@update                          | web,auth     |
    |        | GET|HEAD  | recipes/{recipe}       | recipes.show     | App\Http\Controllers\RecipesController@show                            | web,auth     |
    |        | GET|HEAD  | recipes/{recipe}/edit  | recipes.edit     | App\Http\Controllers\RecipesController@edit                            | web,auth     |
    |        | POST      | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |
    |        | GET|HEAD  | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
    |        | GET|HEAD  | steps                  | steps.index      | App\Http\Controllers\StepsController@index                             | web,auth     |
    |        | POST      | steps                  | steps.store      | App\Http\Controllers\StepsController@store                             | web,auth     |
    |        | GET|HEAD  | steps/create           | steps.create     | App\Http\Controllers\StepsController@create                            | web,auth     |
    |        | GET|HEAD  | steps/{step}           | steps.show       | App\Http\Controllers\StepsController@show                              | web,auth     |
    |        | PUT|PATCH | steps/{step}           | steps.update     | App\Http\Controllers\StepsController@update                            | web,auth     |

1 Ответ

0 голосов
/ 31 мая 2018

Маршрут перенаправления передает 'id' в качестве параметра GET, поэтому ваш контроллер не может понять этот параметр GET как и переменную $ id, поэтому вы можете решить его, выполнив это на вашем контроллере:

public function create(Request $request)
{
    $recipe = Recipe::find($request->id);
    return view('steps.create')->withRecipe($recipe);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...