Laravelでアプリ作成をしています。
ルーティングについて質問です。
結論、
Route::get('/bbs/create', 'PostsController@create')->name('bbs.create');
と記述すると、404エラーでページが表示されないのに、
Route::get('/create', 'PostsController@create')->name('bbs.create');
だと、bbs/createの新規投稿画面が表示されるのはなぜでしょうか?
MVCの関係は以下です。
App\Models\Post.php
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model { // 割り当て許可 protected $fillable = [ 'name', 'subject', 'message', 'category_id', ]; public function comments() { // 投稿は複数のコメントを持つ return $this->hasMany('App\Models\Comment'); } public function category() { // 投稿は1つのカテゴリーに帰属する return $this->belongsTo('App\Models\Category'); } }
PostsController.php
<?php namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Http\Request; use App\Http\Requests\PostRequest; class PostsController extends Controller { public function index() { // 降順で投稿を取得 $posts = Post::orderBy('created_at', 'desc')->paginate(10); return view('bbs.index', [ 'posts' => $posts, ]); } public function show($id) { $post = Post::findOrFail($id); return view('bbs.show', [ 'post' => $post, ]); } public function create() { return view('bbs.create'); } }
一覧ページにて新規投稿画面にいくようにボタンを設置
<div class="new"> <a href="{{ route('bbs.create') }}" class="btn btn-primary">新規投稿フォームへ</a> </div>
Views\bbs\create.blade.php
@extends('layout.bbslayout') @section('title', 'Laravel掲示板_新規投稿ページ') @section('pageCss') <link href="/css/bbs/style.css" rel="stylesheet"> @endsection @include('layout.bbsheader') @section('content') <h1>新規投稿画面</h1> @endsection @include('layout.bbsfooter')
web.php
Route::get('/bbs', 'PostsController@index')->name('bbs.index'); Route::get('/bbs/{id}', 'PostsController@show')->name('bbs.show'); Route::get('/bbs/create', 'PostsController@create')->name('bbs.create');
なぜ、
Route::get('/bbs/create', 'PostsController@create')->name('bbs.create');
では404エラーになって、
Route::get('/create', 'PostsController@create')->name('bbs.create');
では正常に新規投稿画面が表示されるのでしょうか?
ルーティングやコントローラーはあっているはずなのに/bbs/create
だと弾かれる理由がわかりません。
##調べたこと
debugbarでルーティングのパスを確認
そしたら、
Route::get('/create', 'PostsController@create')->name('bbs.create');
しかし、
Route::get('/bbs/create', 'PostsController@create')->name('bbs.create');
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/06/13 02:40
2021/06/13 03:09
2021/06/13 03:13 編集
退会済みユーザー
2021/06/13 04:41