Laravel体験記|Viewを触る

基本的な使い方

viewファイルの用意

  • resources/viewフォルダにviewsファイルを格納していく。
  • viewフォルダ内はフォルダを掘って大丈夫。

resources/views/hello/index.phpを作成。

<h1>Hello Index</h1>
<p><?php echo $msg; ?></p>

controllerを用意

HelloController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function index($msg="default message"){
      $data = [
        'msg' => $msg,
      ];
      return view("hello.index", $data);
    }
}

ルーティング

web.php

Route::get('hello/{msg?}', 'HelloController@index');

ブラウザでアクセス

localhost/hello/

GETパラメーターを使う場合

controllerアクションにRequestインスタンスを渡すようだ。

    public function index($msg="default message", Request $request){
      $data = [
        'msg' => $msg,
        'id' => $request->test,
      ];
      return view("hello.index", $data);
    }

「?test=1」

といったGETパラメーターを渡すと、

「$request->test」

に値が渡ってくるようだ。

なお、GETパラメータが入っていなかった場合でもエラーにはならなかった。

ちょっと脱線するけど、この動的に$requestインスタンスがtestというメンバ変数を持つという仕組みどうやるんだ?と思った。

実装コードみてないけど、phpだから可変変数使えばできるのか。と思った。

$$key

みたいな。

Bladeを使う

Bladeというテンプレートエンジンがあるらしい。

なぜそんなものを使わなきゃならんのや?と正直思うが、みんな使ってるようなので頑張って使ってみる。

bladeファイルを用意

resources/views/hello/index.blade.php

<h1>Hello Index</h1>
<p>{{$msg}}</p>
<p><?php echo $id; ?> / {{$id}}</p>

試しに普通のphpも置いてみたが、どちらも動作するようだ。

まあ自動でエンティティしてもらえるようなので、{{$msg}}こっちを使うべきなんだろう。

フォームを使う

view

<h1>Hello Index</h1>
<p>{{$msg}}</p>
<p><?php echo $id; ?> / {{$id}}</p>

<form method="post" action="{{action('HelloController@index')}}">
  {{csrf_field()}}
  <input type="text" name="msg">
  <input type="submit">
</form>

publicへのパスの取得方法がよくわからんかった。

とりあえず、actionメソッドを見つけたのでそれ使ってパスを取得した。

Controller

    public function post(Request $request){
      $data = [
        'msg' => $request->msg,
        'id' => $request->test,
      ];
      return view("hello.index", $data);
    }

ルーティング

Route::post("hello", "HelloController@post");

Route::postになっているのがミソ。

次回

view続き。blade構文など