Laravel 学習 Part. 4
PHP フレームワーク Laravel 入門
パーフェクトPHPの8章はミニブログアプリケーションを作るというものでしたが、Laravelもブログ作れるよな?と思ったので、投げ出していたLaravelをやります。
レンタルサーバーにLaravelを導入してから作りたいものが思い浮かばず、それっきりとなっていたので実質初見です。
Chapter 1 Laravel を準備する
Composer を入れてLaravelを導入します。本ではLaravelのバージョンは5ですが、6でやろうと思います。本当は5でやった方がいいですが、多分投げ出すので問題ないです。
Laravelの公式にあるとおり、6系をインストールするには、
composer create-project --prefer-dist laravel/laravel blog "6.*"
とします。このとき、"blog" がフォルダ名になります。本ではxamppを進めていましたが、問題がでるまではphp artisan serveでもいいと思います。
ルート情報の追加
routes/web.php
下のアドレスにアクセスすると、web.phpに記述した'hello'ページが表示されます。
http://127.0.0.1:8000/hello
Route::get('hello', function() { return '<html><body><h1>Hello</h1><p>This is sample page.</p></body></html>'; });
vscodeでweb.phpを開いたとき、Routeがundefinedとなったので、
PHP - php intelephense(VScode)でLaravelのコードがUndefined typeになる|teratail
を参考にしました。
ヒアドキュメントを使うと次のようになります。
// ヒアドキュメント $html = <<<EOF <html> <head> <title>Hello</title> <style> body { font-size:16px; color:#999; } h1 { font-size:100px; text-align:right; color:#eee; margin:-40px 0px -50px 0px; } </style> <body> <h1>Hello</h1> <p>This is sample page.</p> <p>これは、サンプルで作ったページです。</p> </body> </html> EOF; Route::get('hello', function () use ($html) { return $html; });
useは無明関数で使われる構文です。
URLにパラメータを含ませてアクセスすると次のようなことができます。
Route::get('hello/{msg}', function ($msg) { $html = <<< EOF <html> <head> <title>Hello</title> <style> body { font-size:16px; color:#999; } h1 { font-size:100px; text-align:right; color:#eee; margin:-40px 0px -50px 0px; } </style> <body> <h1>Hello</h1> <p>{$msg}</p> <p>これは、サンプルで作ったページです。</p> </body> </html> EOF; return $html; });
ヒアドキュメント内に変数が埋め込まれているので、パラーメータを渡してアクセスするとそのパラメータがmsgとなって表示されます。
コントローラ
app/Http/HelloController
Controllerを実装します。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; // 複数アクション利用 global $head, $style, $body, $end; $head = '<html><head>'; $style = <<<EOF <style> body { font-size:16px; color:#999; } h1 { font-size:100px; text-align:right; color:#eee; margin:-40px 0px -50px 0px; } </style> EOF; $body = '</head></body>'; $end = '</body></html>'; function tag($tag, $txt) { return "<{$tag}>" . $txt . "</{$tag}>"; } class HelloController extends Controller{ public function index() { global $head, $style, $body, $end; $html = $head . tag('title', 'Hello/Index') . $style . $body . tag('h1', 'Index') . tag('p', 'This is Index page.') . '<a href="/hello/other">goto other page</a>' . $end; return $html; } public function other() { global $head, $style, $body, $end; $html = $head . tag('title', 'Hello/Other') . $style . $body . tag('h1', 'Other') . tag('p', 'This is Other page.') . $end; return $html; } }
シングルアクションコントローラ
__invoke() メソッドにすることでシングルアクションコントローラになります。
Request Response
クライアントとサーバ間のやりとりを利用します。