PHPおすすめフレームワーク『Laravel5』入門 基本を押さえるサンプル
はじめに
PHPフレームワークの学習方法として
『「ブログ」やら「掲示版」やらのサンプルアプリケーションをとりあえず作ってみよう』
と、おすすめされることがよくあります。
PHPフレームワークに限らずWebアプリケーションの仕組みを理解する上で、
こういった「ブログ」「掲示版」系のサンプルというのは非常に頻繁に登場します。
やはりデータベースからレコードを取得し、登録、削除する、いわゆる「CRUD」がシンプルな構成で実現できるからでしょう。
さて、PHPのおすすめフレームワーク『Laravel5』を扱う本シリーズでも、
多分に漏れずブログページを作成する手順をまとめていくことにします。
Laravel5を使ったブログサンプルの概要
以下の内容で作成していきます。「基本を押さえる」ことを意識して、なるべくシンプルに。
テーブル定義(Model)
テーブル:articles
・title
・body
ルーティング
メソッド | パス | 説明 | コントローラ&メソッド |
---|---|---|---|
GET | / | 一覧 | ArticlesController@index |
GET | /{id} | 詳細 | ArticlesController@show |
GET | /create | 新規 | ArticlesController@create |
POST | /store | 新規保存 | ArticlesController@store |
GET | /edit/{id} | 編集 | ArticlesController@edit |
PATCH | /edit/{id} | 編集保存 | ArticlesController@update |
DELETE | /delete/{id} | 削除 | ArticlesController@destroy |
ブレード(View)
・articles/index.blade.php(一覧)
・articles/detail.blade.php(詳細)
・articles/edit.blade.php(編集)
・articles/create.blade.php(新規投稿)
Laravel5を使ったブログサンプルの作成手順
1.LaravelのProject作成
$ composer create-project "laravel/laravel" --prefer-dist blogsystem
※composerインストール済みが前提
※ドキュメントルート以下で実行
2.DB作成(blogsystem)
$ mysql -u root -p mysql> create database blogsystem;
※MySQLインストール済みが前提
3.「.env」ファイルの変更
DB_DATABASE=blogsystem DB_USERNAME=root DB_PASSWORD=XXXX
※上記作成したデータベース及びログイン時のユーザパスワードに合わせる
4.ドキュメントルートの修正
以下がドキュメントルートになるようhttpd.confを修正
/[Document-Root-Path]/lara5.2.blogsystem
※Webサーバ再起動し、表示を確認しておく。
「Laravel5」の文字がかっこよくセンタリングされて表示されればOK。
5.routes.phpを編集する
Route::group(['middleware' => ['web']], function () { Route::get('/create','ArticlesController@create'); //新規 Route::post('/store','ArticlesController@store'); //新規保存 Route::get('/edit/{id}','ArticlesController@edit'); //編集 Route::patch('/edit/{id}','ArticlesController@update'); //編集保存 Route::delete('/delete/{id}','ArticlesController@destroy'); //削除 Route::get('/{id}','ArticlesController@show'); //詳細 Route::get('/','ArticlesController@index'); //一覧 });
※順番注意
6.articlesテーブルを作成するためのmigrationを作成する
$ php artisan make:migration create_articles_table –create=articles
できあがったmigrationファイルのupメソッドを以下のように修正
public function up() { Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->string('title'); //←追加 $table->text('body'); //←追加 }); }
7.migrateを実行
$ php artisan migrate
※articlesテーブルが出来上がる。
8.modelを作成
$ php artisan make:model Article
9.tinkerを使ってデータをインサート
$ php artisan tinker
Psy Shell v0.6.1 (PHP 5.5.9-1ubuntu4.13 — cli) by Justin Hileman
>>> $a = new App\Article();
=> App\Article {#632}
>>> $a->title = ‘titleA’
=> “titleA”
>>> $a->body = ‘bodyA’
=> “bodyA”
>>> $a->save()
=> true
>>>
10.インサートレコードを確認
mysql> select * from articles;
+—-+———————+———————+——–+——-+
| id | created_at | updated_at | title | body |
+—-+———————+———————+——–+——-+
| 1 | 2016-02-12 05:26:23 | 2016-02-12 05:26:23 | titleA | bodyA |
| 2 | 2016-02-12 05:35:06 | 2016-02-12 05:35:06 | titleB | bodyB |
| 3 | 2016-02-12 05:35:58 | 2016-02-12 05:35:58 | titleC | bodyC |
+—-+———————+———————+——–+——-+
3 rows in set (0.00 sec)
11.ArticlesControllerを作成する(一覧)
$ php artisan make:controller ArticlesController
※ArticlesControllerを以下のように修正
use App\Article; //←Modelをuseしておくとメソッドの記述が簡潔に。 class ArticlesController extends Controller { public function index(){ $articles = Article::all(); return view('articles.index')->with('articles',$articles); } }
12.Viewを作成する(一覧)
resources/articles/index.blade.php
@foreach($articles as $article) <div> <p>{{ $article->title }}</p> <p>{{ $article->body }}</p> </div> <hr> @endforeach
⇒一覧画面が表示されるはず。
13.ArticlesControllerを編集する(詳細)
class ArticlesController extends Controller { ~indexメソッド省略~ public function show($id){ $article = Article::findOrFail($id); return view('articles.detail')->with('article',$article); } }
14.Viewを作成する(詳細)
<h1>{{ $article->title }}</h1> <hr> <p>{{ $article->body }}</p>
⇒/{id}で詳細画面が表示されるはず。
15.ArticlesControllerを編集する(削除)
class ArticlesController extends Controller { ~indexメソッド省略~ ~showメソッド省略~ public function destroy($id) { $article = Article::findOrFail($id); $article->delete(); return redirect('/')->with('flash_message','Article deleted.'); } }
16.Viewを編集する(削除)
詳細画面に削除ボタンをつける
<h1>{{ $article->title }}</h1> <hr> <p>{{ $article->body }}</p> <form action="/delete/{{ $article->id }}" method="article"> {{ csrf_field() }} {{ method_field('delete') }} <input type="submit" value="Delete"> //←追加 </form>
一覧にフラッシュSessionメッセージ表示箇所(先頭3行)を作成しておく。
@if(Session::get('flash_message')) <div>{{ session('flash_message') }}</div> @endif @foreach($articles as $article) <div> <p>{{ $article->title }}</p> <p>{{ $article->body }}</p> </div> <hr> @endforeach
⇒詳細画面から削除ボタンで削除できるはず。
17.ArticlesControllerを編集する(新規&新規投稿)
class ArticlesController extends Controller { ~indexメソッド省略~ ~showメソッド省略~ ~destroyメソッド省略~ public function create(){ return view('articles.create'); } public function store(Request $ar){ $article = new Article(); $article->title = $ar->title; $article->body = $ar->body; $article->save(); return redirect('/')->with('flash_message','New Article Added !'); } }
18.Viewを作成する(新規&新規投稿)
※articles/create.blade.php
<h1>New Article Add Form</h1> <hr> <form action="/store" method="article"> {{ csrf_field() }} <input type="text" name="title"> <textarea name="body"></textarea> <input type="submit" value="New Article Add !"> </form>
⇒/createにアクセスすると投稿画面が表示されるはず。
19.ArticlesControllerを編集する(編集)
class ArticlesController extends Controller { ~indexメソッド省略~ ~showメソッド省略~ ~destroyメソッド省略~ ~createメソッド省略~ ~storeメソッド省略~ public function edit($id){ $article = Article::findOrFail($id); return view('articles.edit')->with('article',$article); } public function update(Request $pr, $id){ $article = Article::findOrFail($id); $article->title = $pr->title; $article->body = $pr->body; $article->save(); return redirect('/'.$id)->with('flash_message','Article Updated.'); } }
20.Viewを作成する(編集)
※articles/edit.blade.php
<h1>Article Edit Form</h1> <hr> <form action="/edit/{{ $article->id }}" method="article"> {{ csrf_field() }} {{ method_field('patch') }} <input type="text" name="title" value="{{ old('title',$article->title) }}"><br> <textarea name="body">{{ old('body',$article->body) }}</textarea> <input type="submit" value=" Edit !"> </form>
⇒/edit/{id}でアクセスすると編集画面が表示されるはず。
21.適宜ページ間リンクを設置。
22.適宜HTML,CSS周りを修正。
WEBアプリケーション関連 人気連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載