Laravel学習#2 (テンプレートエンジンBlade)
テンプレートファイル作成
resource/views内にファイルを作成する。
resource/views/hello/index.php
Route::get('hello', function (){ return view('hello.index'); });
view('<フォルダ名>.<ファイル名>')で指定する。
view()が返却しているのは、指定したテンプレのレンダリング結果をコンテンツとして設定している
Responseインスタンスであることに注意。
コントローラ内で
public function index()
{
$data = [
'msg' => 'This is a message from HelloController'
];
return view('hello.index', $data);
}
のように第二引数で連想配列を渡すと、view内で$msgとして値を使える。
getパラメータの受け取り方
public function index($name = 'No Name', Request $request) { $data = [ 'msg' => 'This is a message from HelloController', 'name' => $name, 'id' => $request->hogehoge ]; return view('hello.index', $data); }
$request->hogehogeでhogehogeパラメータを受け取れる。
viewのファイル名をindex.blade.phpとすることで
Bladeの便利な機能(@ifとか{{$value}}などを使うことが出来る!)
Bladeにはレイアウトの定義と継承という概念がある。
セクションとは、レイアウト内に用意される区画である。
セクションを使うには@sectionと@yieldを使う。
Laravel学習#1 (プロジェクト作成・ルーティング設定・サーバ起動・コントローラ作成)
プロジェクト作成
laravel new <project name>
サーバ起動(止めるときは Ctrl + C)
- http://localhost:8000で起動される
php artisan serve
ルーティング設定
- ルーティングはroutes/web.appに記述する
- 第一引数にパス、第二引数にはコントローラ名@アクション名を記述する
Route::get('hello', 'App\Http\Controllers\HelloController@index'); Route::get('hello/other', 'App\Http\Controllers\HelloController@other');
コントローラ作成
php artisan make:contoller <controller name>
コントローラにはpublic function index()のようにアクションを入れる。
ルーティング設定(パラメータ入り:?だと任意)
Route::get('hello/{id?}/{pass?}', 'App\Http\Controllers\HelloController@index');
こうするとHelloControllerの中で使える
public function index($id = 'no id', $pass = 'no pass')
シングルアクションコントローラ
public function __invoke()
{
// 処理
}
__invokeを使うと、1個のクラスに1個のアクションのみとなる。他アクションは入れられない。
ルート設定は以下の通り。
Route::get('hello', 'App\Http\Controllers\HelloController');
リクエストとレスポンス
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; class HeyController extends Controller { // public function index(Request $request, Response $response) { $html = <<<EOF <html> <body> <h1>Hey!</h1> <h3>Request</h3> <pre>{$request}</pre> <h3>Response</h3> <pre>{$response}</pre> </body> </html> EOF; $response->setContent($html); return $response; } }
引数にrequestとresponseを入れるだけで、インスタンスを使うことが出来る。
$response->url();でアクセスしたURLを返すなどのメソッドがある。
Amazonギフト券のシールめくりに失敗して番号読めない→カスタマーサービスに問い合わせて5分で解決した
Amazonギフト券のシールを剥がそうとしたところ、
添付画像のように番号まで剥がれてしまった。
「1万円無駄にした・・・」と思いながら解決策をググったところ
「Amazonカスタマーサービス」に問い合わせれば代わりに登録してくれるということで半信半疑で試してみた。
https://www.amazon.co.jp/gp/help/customer/contact-us
チャット形式で問い合わせたところ、担当者のHさんとチャットでやりとりすることに。
①ギフト券裏の左下にある16桁の番号
②見えているシリアル番号(一部で良い)
を聞かれて答えたところ、30秒もかからずに代わりに自分のアカウントに1万円分を登録してくれた!(残高が増えてた)
1万円をドブに捨てた気持ちだったので嬉しかったです。
対応もめっちゃ早かったです。ありがとうございました。