PHP Laravel framework入門(2) – 簡単なプログラムを作る
2017/08/29
2019/12/23
タグ: Framework, Laravel, php, 入門
本章では最初に簡単なhello worldを表示するプログラムを作成し基本的なLaravelの使い方を学んできます。まず最初にLaravelの環境構築で欠かせないコマンドartisanコマンドの機能のコレクションを確認してみましょう。
artisanコマンド
artisanがサポートするコマンド機能の一覧を確認してみましょう。artisanコマンドは機能が豊富で特に便利なのは他のフレームワークでも出てくるscaffoldな機能です。つまりコントローラやモデル、ビューをある程度雛形で用意してくれる機能を持っています。ゼロから作業するとMVCの関係性をもたせてプログラムを編んでゆく必要があり骨の折れる仕事ですがこの機能を使うと自動生成で雛形を生成するため作業が楽になります。また必要とするデータベースの定義をするとモデルやDB操作を簡単にするORMの機能、DB&テーブルを自動生成してくれます。
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
$ php artisan list Laravel Framework 5.4.35 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --env[=ENV] The environment the command should run under -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug Available commands: clear-compiled Remove the compiled class file down Put the application into maintenance mode env Display the current framework environment help Displays help for a command inspire Display an inspiring quote list Lists commands migrate Run the database migrations optimize Optimize the framework for better performance serve Serve the application on the PHP development server tinker Interact with your application up Bring the application out of maintenance mode app app:name Set the application namespace auth auth:clear-resets Flush expired password reset tokens cache cache:clear Flush the application cache cache:forget Remove an item from the cache cache:table Create a migration for the cache database table config config:cache Create a cache file for faster configuration loading config:clear Remove the configuration cache file db db:seed Seed the database with records event event:generate Generate the missing events and listeners based on registration key key:generate Set the application key make make:auth Scaffold basic login and registration views and routes make:command Create a new Artisan command make:controller Create a new controller class make:event Create a new event class make:job Create a new job class make:listener Create a new event listener class make:mail Create a new email class make:middleware Create a new middleware class make:migration Create a new migration file make:model Create a new Eloquent model class make:notification Create a new notification class make:policy Create a new policy class make:provider Create a new service provider class make:request Create a new form request class make:seeder Create a new seeder class make:test Create a new test class migrate migrate:install Create the migration repository migrate:refresh Reset and re-run all migrations migrate:reset Rollback all database migrations migrate:rollback Rollback the last database migration migrate:status Show the status of each migration notifications notifications:table Create a migration for the notifications table queue queue:failed List all of the failed queue jobs queue:failed-table Create a migration for the failed queue jobs database table queue:flush Flush all of the failed queue jobs queue:forget Delete a failed queue job queue:listen Listen to a given queue queue:restart Restart queue worker daemons after their current job queue:retry Retry a failed queue job queue:table Create a migration for the queue jobs database table queue:work Start processing jobs on the queue as a daemon route route:cache Create a route cache file for faster route registration route:clear Remove the route cache file route:list List all registered routes schedule schedule:run Run the scheduled commands session session:table Create a migration for the session database table storage storage:link Create a symbolic link from "public/storage" to "storage/app/public" vendor vendor:publish Publish any publishable assets from vendor packages view view:clear Clear all compiled view files |
helloを出力するコントローラを作成する
コントローラはサイトの基本プログラムロジックを処理するバックグランドの要のエースとも言えるプログラムです。どのプログラムも考え始めるスタートをルーティングとコントローラを合わせるところから始めると理解しやすくなります。
1 2 |
$ php artisan make:controller hello Controller created successfully. |
この処理を実施したことでコントローラの雛形が作られています。 プロジェクト直下のappフォルダーの配下には既にhello用コントローラのboilerplate(雛形)が存在します。 正確には「app/Http/Controllers/Hello.php」と言う設置パスでファイルが生成されているので確認してみましょう。
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class hello extends Controller { // } |
無事にhelloのクラスができましたね。雛形なので中身の処理はありませんが器はできたことが確認できました。次にルーティングを考えます。結局大本の呼び出しはルータの記述から行われそこにしてしているコントローラが呼び出されます。次の処理はいきなりコントローラを呼び出すのではなくルーターから直接ブラウザへ出力を渡します。表示確認を取ってみましょう。
◯ routes/web.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/hello',function(){ return 'Hello World!'; }); |
◯ サーバの起動
1 2 3 4 5 |
php artisan serve --host=0.0.0.0 --port=7500 Laravel development server started: <http://0.0.0.0:7500> [Tue Aug 29 16:41:46 2017] 192.168.5.132:61502 [200]: /favicon.ico [Tue Aug 29 16:42:12 2017] 192.168.5.132:61551 [200]: /favicon.ico [Tue Aug 29 16:42:23 2017] 192.168.5.132:61572 [200]: /favicon.ico |
ブラウザから http://xxx.xxx.xxx.xxx:7500/hello と入力しアクセスしてみましょう。
問題なければブラウザ画面に「Hello World!」と表示されたはずです。今度は直接ブラウザへ返却するのではなく、先程作ったコントローラを経由して返却してみましょう。先程の記述はコメントアウトにします。代わりにhelloコントローラのクラス名とクラスで定義されている処理をさせるターゲット関数を記述します。「クラス名@関数名」のような表現で記述を行います。尚、反転箇所は記述の追加の部分です。
◯ routes/web.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); /* Route::get('/hello',function(){ return 'Hello World!'; });*/ Route::get('hello', 'Hello@index'); |
◯ app/Http/cintrollers/Hello.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class Hello extends Controller { public function index() { return 'hello world from controller : )'; } } |
再度サーバを起動してhttp://xxx.xxx.xxx.xxx:7500/hello へアクセスすると「hello world from controller : )」が表示されましたか?表示されたら成功です。
コントローラからViewを通じて表示させる。
◯ app/Http/Controllers/hello.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class Hello extends Controller { public function index() { return 'hello world from controller : )'; } public function show($name) { return view('hello',array('name' => $name)); } } |
◯ routes/web.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); /* Route::get('/hello',function(){ return 'Hello World!'; });*/ Route::get('hello', 'Hello@index'); Route::get('/hello/{name}', 'Hello@show'); |
◯ resources/views/hello.blade.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 |
<!DOCCTYPE html> <html> <head> <title>Laravel</title> <link href="//fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css"> <style> html, body { height: 100%; } body { margin: 0; padding: 0; width: 100%; display: table; font-weight: 100; font-family: 'Lato'; } .container { text-align: center; display: table-cell; vertical-align: middle; } .content { text-align: center; display: inline-block; } .title { font-size: 96px; } </style> </head> <body> <div class="container"> <div class="content"> <div class="title">Hello {{$name}}, welcome to Laraland! : )</div> </div> </div> </body> </html> |
以上の作業が終わったらブラウザから「http://xxx.xxx.xxx.xxx:7500/hello/[あなたの名前]」でアクセスして見てください。画面上に大きな文字であなたの名前で表示されるはずです。