こんばんは、のるぼるのんです。
新しい言語を勉強する時とかって、教本を見ながら実際に手を動かしてとりあえず書いてみる、いわゆる写経をすると思います。
でも実際に写経したプログラムを、Webページとして表示させたりするのって、LAMPの環境構築だったりVhosts書いたり、URLを打ち込むのが地味に面倒だったりしますよね。
今日はそんな面倒な所をLaravel artisanでやってみよう、っていうお話。今回のターゲット層は自分と同じように勉強中の人。長くなりますがLaravelの再確認も兼ねて、ごゆっくり見ていってください。
前準備 Laravelの導入
こちらの記事で紹介しています。
Laravel5.7に管理画面マネージャー「Voyager」を導入する
composerの導入からLaravel, 管理画面マネージャーVoyagerの導入まで紹介しています。
データベースに接続しない演習の時はMySQLなどの環境構築は不要ですので、PHP, composerの導入、Laravelの導入をすればすぐに始められます。
MySQLなどの環境構築は、また別のサイトをご確認ください。
では実際にやっていきましょう。
ルーティングを再確認
まずはLaravelのルーティングを再度確認していきましょう。
Laravelプロジェクトを導入した直後のルーティングはこうなってます。
web.php
1 2 3 |
Route::get('/', function () { return view('welcome'); }); |
artisanコマンドからserveを叩いて、仮想環境を構築、http://localhost(:8000)にアクセスすると、ページが表示されます。
http://localhost(:8000)にアクセスすることで、/にアクセス、結果welcome.blade.phpの内容が表示されます。
コンソール
1 |
php artisan serve |
コントローラーを準備し、ルーティングを変えていきましょう。
コンソール
1 |
php artisan make:controller PlacticeController |
web.php
1 |
Route::get('/', 'PlacticeController@index'); |
コンソールからartisanコマンドでコントローラーを作成し、ルーティングでコントローラーを経由します。
この段階でhttps://localhost(:8000)にアクセスすると、コントローラーにindexメソッドがないよ、というエラーが表示されます。
元のルーティングと同じようにwelcome.blade.phpを表示させましょう。
PlacticeController.php (作成したコントローラーを編集します)
1 2 3 4 |
public function index() // 追記しましょう { return view('welcome'); } |
これでLaravelを構築した時と同じようにwelcome.blade.phpが表示されます。
さあ、それでは本題に入りましょう。
数字で名前をつける時
演習問題とかでよくあるパターンの時ですね。1.htmlとか1.phpみたいなやつです。
やってる演習まで(ファイルを用意した所まで)連番で配列を準備してリンクを作成、ページを表示する感じですね。
今回はLaravelを使用しているので、Bladeを使用することにご注意ください(ファイル拡張子が.phpなどから.blade.phpに変わります)。
まずはビューを5つほど位準備します。
コンソール
1 2 3 4 |
mkdir resources/views/plactices // 練習ディレクトリの作成。 touch resources/views/plactices/1.blade.php ... touch resources/views/plactices/5.blade.php // 1~5まで作成してみます。 |
PlacticeController.phpおよび、welcome.blade.phpを編集します。
PlacticeController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
use Illuminate\Support\Facades\View; public function index() { $page = 1; $array = []; while (View::exists("plactices/{$page}")) { $array[] = $page; $page += 1; } return view('welcome', compact('array')); } |
$page = 1で、連番の最初を指定。$arrayで配列を宣言。
while (view…)で、resources/views/placticesディレクトリの中に1.blade.php〜が存在すれば、配列に数字を追加、無ければ繰り返し終了です。
後はreturnでビューを表示して、compactでビューに変数を渡します。
welcome.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<div class="content"> <div class="title m-b-md"> Laravel </div> <div class="links"> @forelse ($array as $value) <a href="/{{ $value }}">Plactice{{ $value }}</a> @empty 利用可能なページはありません @endforelse </div> </div> |
welcome.blade.phpの最後らへん、aタグがたくさんある部分を編集します。
@forelse ($array as $value)で、$arrayのなかにデータが存在するときにforeachを回し、各ページへのリンクを作成。
@emptyでデータが存在しない時の処理をします。
リンクが変わりました。このリンクから各ページにアクセスします。
web.php
1 |
Route::get('/{pageId}', 'PlacticeController@detail'); // 追記します |
PlacticeController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public function detail($id) { if (View::exists("plactices/{$id}")) { $view = "plactices.{$id}"; return view($view); } $page = 1; $array = []; while (View::exists("plactices/{$page}")) { $array[] = $page; $page += 1; } return view('welcome', compact('array')); } |
PLACTICE1にアクセスすると、/1 にアクセスします。web.php内で/{pageID}とすることで、detailメソッドの$idに1が渡されます。
PlacticeComtroller.php、detailメソッドでは、if 文内で/resources/views/plactices/1.blade.phpがあればそちらに移動、無ければwelcome.blade.phpに戻ります。
真っ白の画面は表示されましたか?今回はbladeファイルにファイル名のみ記述し表示しました。表示されたら、後はbladeファイルにガシガシ写経していきましょう!
bladeの名前を取得して、表示させる
実際の写経では、1.htmlなどより、hello.htmlなど、名前が付いている場合のが多いですね。
今度は名前を取得して、そちらにアクセスしてみましょう。/reources/views/plactices/内にhello.blade.phpを準備しましょう。
web.php
1 2 |
Route::get('/', 'PlacticeController@index'); Route::get('/{name}', 'PlacticeController@detail'); |
内容はほぼ変わりませんね。/{pageId}が、今回の実情に合わせて/{name}に変わったくらいですね。
PlacticeController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\View; use File; class PlacticeController extends Controller { public function index() { $array = []; $path = resource_path('views/plactices/'); // /resources/views/placticesまでのフルパスを取得 $files = File::files($path); // /plactices内のファイル情報を全て取得 foreach ($files as $file) { $array[] = basename($file, '.blade.php'); // ファイル名のみの配列に変換 } return view('welcome', compact('array')); } public function detail($name) // $idを$nameとしました。 { if (View::exists("plactices/{$name}")) { $view = "plactices.{$name}"; return view($view); } $array = []; $path = resource_path('views/plactices/'); $files = File::files($path); foreach ($files as $file) { $array[] = basename($file, '.blade.php'); } return view('welcome', compact('array')); } } |
こんな感じでhello.blade.phpにもアクセス出来るようになりました!
写経における環境構築、一回やってしまえば後はファイル作成のみでいけるので、長く使えそうかも、と思っています。便利に感じる人もちらほらいて欲しいな。
まあLaravelのルーティングの勉強も兼ねて、ちょっとやってみてください。
ちなみに
ちなみにこの方法、FTPなどでファイルをあげて記事へのリンクを記述して〜みたいなのが、ファイルアップロードのみで完結します。ニュースサイトみたいなのでも使えると思うので、ぜひご確認を。
コメントを書く