EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

(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が付いてるからか?

 

Laravelでビューが表示できない。。

↑が近いような気がするのだが。進まない・・

 

このまま終わるのかと諦めかけた時、単純ミスに気付く。

resources\views\book\index.blade.phpに配置すべきところを、

resources\views\book.blade.phpと配置していたせい。

2時間ぐらい消えてしまったがね。

 

続く