Laravel入門覚書1: Laravelの基本を理解しよう
01:Laravelの基本を理解しよう
ここでは、この講座の目的・対象者・学習の進め方を確認します。それから、Laravelの特徴についても学習します。
Webアプリケーションフレームワークとは
Webアプリを開発するために便利な部品やツールをひとまとめにしたもの。
Webアプリケーションを短期間に効率よく開発できる。
Laravelの特徴
- テンプレートエンジン(Blade)
- データベース(O/Rマッパー:Eloquent)
- 対話型コンソール(artisan tinker)
- ユーザー認証 など
参考になるWebページ
公式・総論
Laravel - The PHP Framework For Web Artisans
https://laravel.com/
Laravel - ウェブ職人のためのPHPフレームワーク
http://laravel.jp/
Laravel ドキュメント
https://readouble.com/laravel/
Laravel - Wikipedia
https://ja.wikipedia.org/wiki/Laravel
チュートリアル
Laravel入門: 初心者でも10分でWebサービスを作れる!
PHPフレームワークLaravelとPaizaCloudの使い方 - paiza開発日誌
https://paiza.hatenablog.com/entry/2018/02/16/paizacloud_laravel
Laravel学習帳 - はじめてのLaravel入門サイト -
http://laraweb.net/
Laravel5でシンプルなCRUDアプリを開発する - アシアルブログ
http://blog.asial.co.jp/1360
評価
Laravelのここがすごい - Qiita
https://qiita.com/nunulk/items/78d70ac809948b470bbc
Laravelの開発で感じたメリットとデメリットをまとめてみた
ぐるなびをちょっと良くするエンジニアブログ
http://developers.gnavi.co.jp/entry/laravel-2
Laravelでウェブアプリケーションをつくるときのベストプラクティスを探る - Qiita
https://qiita.com/nunulk/items/b1e2da51b5dabab92da0
02:アプリケーションを用意しよう
ここでは、Laravelを使う準備として、アプリケーション用ディレクトリを用意します。Laravelでは、このディレクトリに、アプリケーションに必要な機能を作り込んでいきます。また、このディレクトリを用意するだけで、Webサーバーを起動して、動作を確認できます。
####このチャプターで使用したコマンド
カレントディレクトリの確認
$ pwd
ディレクトリの一覧
$ ls
PHPのバージョンを確認
$ php -v
Laravelのバージョンを確認
$ laravel -V
アプリケーション用ディレクトリを自動生成する
$ laravel new bbs
####ディレクトリ作成を高速化するには
"laravel new"コマンドの実行前に以下のような設定をしておけば、コマンドの実行時間を短くできます。
$ composer config -g repositories.packagist composer 'https://packagist.jp'
$ composer global require hirak/prestissimo
####Webサーバーを起動
$ cd bbs
$ php artisan serve
####ブラウザで以下にアクセスすると、アプリのWebページを表示する
なお、LaravelのサーバはHTTPで動作していますが、PaizaCloudではこれをHTTPSに変換しています。またサーバはlocalhostで動作していますが、PaizaCloudでは"https://localhost-サーバ名.paiza-user.cloud:ポート番号"というURLでlocalhostに接続できるようになっています。
Webサーバーを停止するには、ターミナルで、キーボードで「CTRL」キー(コントロールキー)を押しながら「C」のキーを押す。
Artisanとは
ターミナルで「artisan」(アーティサン)コマンドを使ってLaravelの機能を呼び出すことができます。LaravelでWebアプリケーションを開発するときに役に立つ、数多くのコマンドを提供しています
演習課題「Laravelのアプリケーションディレクトリを作成する」
右のターミナルで、現在のディレクトリに「myblog」というLaravelのアプリケーションディレクトリを作成してください。
laravel new myblog
演習課題「Laravelサーバーを起動する」
LaravelのWebサーバーを起動してください。
php artisan serve
##03:Laravel で HelloWorld
ここでは、Laravelのアプリケーションで簡単なメッセージを表示します。Hello Worldを表示して、Laravelでアプリケーションを作るための基本操作を理解しましょう。
Welcomeページを修正する
bbs/resources/views/welcome.blade.php
= date('Y/m/d H:i:s') ?>
演習課題「Welcomeページを修正する」
右の環境には、Laravelで「myblog」というアプリケーションのディレクトリを作ってあります。
このアプリケーションのwelcome.blade.phpを修正して、以下のタイトルを表示するようにしてください。
Hello paiza
模範解答1
bbs/resources/views/welcome.blade.phpの'Laravel'を変更する
<div class="title m-b-md">
Hello paiza
</div>
##04:1行掲示板を作ろう
ここでは、Laravelで作る1行掲示板の概要を整理します。また、掲示板で必要になるデータベースを準備しましょう。
データベース構成
1行掲示板のデータベースには、次の情報が必要になります。
- データベース : mybbs
- テーブル : articles
- カラム : id, content, created_at, updated_at
このデータベースは、phpMyAdminで用意しておきます。
アプリケーションのデータベース設定
アプリケーションからデータベースを呼び出すには、次のデータベース設定が必要です。
「.env」ファイルは、隠しファイルになっているので、「bbs」ディレクトリを右クリック->「隠しファイルを表示」で表示しておきます。
bbs/.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mybbs
DB_USERNAME=root
DB_PASSWORD=secret
演習課題「Laravelのデータベース環境を設定する」
右の環境では、「myblog」というLaravelのアプリケーションディレクトリを作成してあります。また、MySQLに「myblog」用のデータベース「myblogdb」が作成してあります。
laravelの環境設定ファイルに以下の情報を入力して、このデータベースにアプリケーションから接続できるようにしてください。
- DB_DATABASE=myblogdb
- DB_USERNAME=root
- DB_PASSWORD=(不要)
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
模範解答1
隠しファイルの「.env」に設定情報を入力する
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myblogdb
DB_USERNAME=root
DB_PASSWORD=secret
##05:モデルとコントローラを用意する
ここでは、Laravelから1行掲示板のデータベースを操作するモデルを用意します。モデルを使うと、PHPのオブジェクトとして、データベースのレコードを操作できるようになります。
モデルとマイグレーション、コントローラを作成
$ cd bbs
$ php artisan make:model Article -m -c -r
contentカラムを追加
database/migrations/2018_xx_xx_xxxxxxxx_create_articles_table.php
public function up()
{
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->string('content');
$table->timestamps();
});
}
マイグレーション実行
$ php artisan migrate
参考になるWebページ
【Laravel】わりとよく使うArtisanコマンド集 - Qiita
https://qiita.com/sola-msr/items/a09b857c5e7f7c88d01d
演習課題「モデルにカラムを追加しよう」
右の環境には、Laravelの「myblog」というアプリケーションを作成してあります。また、MySQLに「myblogdb」というデータベースを作成してあります。
このアプリケーションに、Diaryという名前のモデルとコントローラ・マイグレーションファイルを自動生成して、Diaryテーブルに「topic」というカラムを追加してください。
手順は次の通りです。
- モデルとコントローラ・マイグレーションファイルを自動生成する
- マイグレーションファイルに「topic」カラムを追加する
- 生成したマイグレーションファイルの設定をデータベースに反映する
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
模範解答1
php artisan make:model Diary -m -c -rで、各ファイルを自動生成
public function up()
{
Schema::create('diaries', function (Blueprint $table) {
$table->increments('id');
$table->string('topic');
$table->timestamps();
});
}
##06:ルーティングを定義しよう
ここでは、Laravelの1行掲示板のルーティングを設定します。ルーティングを使うことで、特定のアドレスにアクセスした時、どの機能を呼び出すか設定できます。
ルーティングとは
どのアドレスにアクセスした時、どの機能を呼び出すか設定できます。LaravelによるWebアプリケーションでは、機能に応じて、アドレスを割り当てておきます。そして、ルーティングで、リクエストに応じて実行するコードを切り替えます。
1行掲示板のルーティング(一覧画面、詳細画面)
bbs/routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/articles', 'ArticleController@index')->name('article.list');
Route::get('/article/{id}', 'ArticleController@show')->name('article.show');
paiza-cloud用https対応
app/Providers/AppServiceProvider.php
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
\URL::forceScheme('https');
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
演習課題「ルーティングを設定する」
右の環境には、Laravelで「myblog」というアプリケーションを作ってあります。
このアプリケーションのルーティングを設定して、以下のURLで、「DiaryController」(ダイアリーコントローラ)のindexメソッドを呼び出すようにしてください。
https://localhost:8000/diary
ブラウザで表示した際に、404エラーが発生していなければ問題ありません。
模範解答1
myblog/routes/web.phpに、ルートを追加する
Route::get('/diary', 'DiaryController@index')->name('diary.list');
##07:コントローラとビューを作成しよう
ここでは、Laravelの1行掲示板のために、コントローラとビューを作成します。そして、プログラムを制御するコントローラと、ページの見た目を記述するビューの使い方を学習します。
コントローラからデータを渡す
/bbs/app/Http/Controllers/ArticleController.php:
paiza bbs
{{ $message }}
------------------------------------------------------------- 演習課題「コントローラからビューを呼び出す」 右の環境には、Laravelで「myblog」というアプリケーションを作ってあります。 このアプリケーションで、以下のURL(ユーアールエル)にアクセスしたら、ビューの「index.blade.php」を呼び出して表示するように、コントローラのindexメソッドを修正してください。 ``` https://localhost:8000/diary ``` 採点して、すべてのジャッジに正解すれば、演習課題クリアです! 模範解答1 ~/myblog/app/Http/Controllers/DiaryController.phpのindexメソッドで、indexビューを呼び出す public function index() { return view('index'); } ------------------------------------------------------------- 演習課題「コントローラからビューにデータを渡す」 右の環境には、Laravelで「myblog」というアプリケーションを作ってあります。このアプリケーションでは、以下のURL(ユーアールエル)にアクセスしたら、ビューの「index.blade.php」を呼び出して表示するようになっています。 コントローラのindexメソッドを修正して、$message変数をビューに渡すようにしてください。 また、コントローラから渡された$message変数をpタグで表示するようにindex.blade.viewを書き換えてください。 ``` https://localhost:8000/diary ``` 採点して、すべてのジャッジに正解すれば、演習課題クリアです! 模範解答1 indexメソッドで、view関数の引数に、['message' => $message] を追加し、index.blade.phpに{{ $message }}
を追加する // DiaryController.php public function index() { $message = 'Welcome to my page!'; return view('index', ['message' => $message]); } // index.blade.phpmyblog Index Page
{{ $message }}
------------------------------------------------------------- ##08:記事一覧を作成しよう ここでは、1行掲示板の記事一覧を作成します。そのために、コントローラで、モデルからデータ一覧を取り出して、ビューで一覧表示します。 コントローラで、記事一覧を取得する /bbs/app/Http/Controllers/ArticleController.php: $message, 'articles' => $articles]); } } ビューで記事一覧を表示する /bbs/resources/views/index.blade.php paiza bbspaiza bbs
{{ $message }}
@foreach ($articles as $article){{ $article->content }}
@endforeach ------------------------------------------------------------- 演習課題「MyBlogのデータ一覧を表示しよう」 右の環境には、Laravelで「myblog」というアプリケーションを作ってあります。このアプリケーションで、以下のURL(ユーアールエル)にアクセスしたら、ビューの「index.blade.php」を呼び出して表示します。 ``` https://localhost:8000/diary ``` このアプリケーションを修正して、「myblog」アプリケーションのサンプルデータ一覧を表示するよう、DiaryController.phpのindexメソッドを修正してください。一覧データの変数名はdiariesとします。 また、index.blade.phpを編集して、pタグで一覧データのtopicを表示してください。 採点して、すべてのジャッジに正解すれば、演習課題クリアです! 模範解答1 /bbs/app/Http/Controllers/DiaryController.phpのindexメソッドで、データベースの全てのデータを取得して、diariesに代入する。foreachで一覧データのtopicを全て表示する。 // DiaryController.php public function index() { $message = 'Welcome to my page!'; $diaries = Diary::all(); return view('index', ['message' => $message, 'diaries' => $diaries]); } // index.blade.phpmyblog Index Page
{{ $message }}
@foreach ($diaries as $diary){{ $diary->topic }}
@endforeach ------------------------------------------------------------- ##09:詳細画面を作ろう ここでは、1行掲示板の記事を個別表示する画面を作成します。そのために、コントローラで、モデルから、指定したデータを取り出して、ビューで表示します。 コントローラのshowメソッドで、特定の記事を取り出す /bbs/app/Http/Controllers/ArticleController.php: public function show(Request $request, $id, Article $article) { $message = 'This is your article ' . $id; $article = Article::find($id); return view('show', ['message' => $message, 'article' => $article]); } showビューで、指定の記事を表示する /bbs/resources/views/show.blade.php paiza bbspaiza bbs
{{ $message }}
{{ $article->content }}
記事一覧から個別の記事にリンクする /bbs/resources/views/index.blade.php paiza bbspaiza bbs
{{ $message }}
@foreach ($articles as $article) @endforeach ------------------------------------------------------------- 演習課題「MyBlogの特定データを表示しよう」 右の環境には、Laravelで「myblog」というアプリケーションを作ってあります。このアプリケーションで、以下のURL(ユーアールエル)にアクセスしたら、ビューの「index.blade.php」を呼び出して表示します。 ``` https://localhost:8000/diary ``` このアプリケーションに、以下のURLで「myblog」アプリケーションの特定データを表示するよう、DiaryController.phpのshowメソッドを修正してください。一覧データの変数名はdiaryとします。 ``` https://localhost:8000/diary/(id) ``` 模範解答1 /bbs/app/Http/Controllers/DiaryController.phpのshowメソッドで、データベースの指定データを取得して、diaryに代入する。 public function show(Request $request, $id, Diary $diary) { $diary = Diary::find($id); return view('show', ['diary' => $diary]); } ------------------------------------------------------------- 参照元: https://paiza.jp/works/laravel/primer