(2022/3/17)Laravel環境 5日目
■コントローラ
やっていきましょう。
Laravel入門 - 使い方チュートリアル - - Qiita
$php artisan make:controller BookController
app/Http/Controllers に作成される。
関数を追加して、関数からビューにデータを渡したり。
-----
class BookController extends Controller
{
public function edit($id){
// パラメータ指定で取得
$book = Book::findOrFail($id);
return view('book/edit', compact('book'));
}
}
-----
次にデータを渡す先のビューを作成する。
■ビュー作成
resources/views に作成される。じゃなかった、ビューはコマンドでは作ってくれない。
今回はbookビューなのでbookディレクトリを作成し、その中にindex.blade.phpを作成する。
中身はhtml風味だが、中にループなど記述して受け取ったデータを出力する。
-----
@foreach($books as $book)
<tr>
<td>
<a href="/book/{{ $book->id }}/edit">{{ $book->id }}</a>
</td>
</tr>
@endforeach
-----
ファイル名のbladeはテンプレートエンジンで、ビューの中にphpを直接記述できる。
routes/web.phpにコントローラを記述する。
Route::resource('book', 'BookController');
で、サービス起動・・するとエラー
target class [BookController] does not exist.
エラーで調べると・・
【Laravel】エラーメッセージ「Target class [○○Controller] does not exist.」が表示されたときの解決策をお伝えします | たいらのエンジニアノート
完全修飾か、useで指定する。
useの方が便利ぽいので、web.phpに
use App\Http\Controllers\BookController; を記述、
してもエラー変わらず。
Route::get('/book', [BookController::class, 'index']);
の記述にしたら進んだ。
Laravel 8.x以降は構文が多少違う模様。
まだエラーが残ってる。
View [book.index] not found.
ビューのファイル名にbladeが付いてるからか?
↑が近いような気がするのだが。進まない・・
このまま終わるのかと諦めかけた時、単純ミスに気付く。
resources\views\book\index.blade.phpに配置すべきところを、
resources\views\book.blade.phpと配置していたせい。
2時間ぐらい消えてしまったがね。
続く