PHP(Laravel)入門者のための要点まとめ

#初めてのPHP(Laravel)

普段はモバイルアプリの開発をしています😊
興味からPHP(Laravel)を触り、簡単なアプリケーションを作成した際にやったこと、調べたことをまとめました。

この記事ではアプリケーション作成は行いませんが、
アプリケーションを作成する際の手順に沿って、Larabel入門者なら知っておきたい基本事項をまとめましたので、ご参考ください😎


___

今回Laravelを学習する際にUdemyを利用しました！
[【2日でできる】はじめての PHP 7 x Laravel 5.5 入門](https://www.udemy.com/php7study/)

【学べること】

* 最新のPHP（バージョン7）を実行する環境をローカル（OS XまたはWindows）に作成できるようになる
* PHPの動作の仕組みを理解し、かんたんなPHPスクリプトが書けるようになる。
* Webアプリフレームワーク（Laravel）を使って、書籍管理システムを作成し、オリジナルのWebサービスを作れるようになる
* データベースインスタンスを作成し、テーブルを作成できるようになる

わかりやすくてオススメの講座ですのでぜひ！！
___


##コンポーザーて何？

まず、コンポーザーのインストールからはじめました。
コンポーザーとは、必要なライブラリをいい感じにダウンロードしてくれるものです！

>例えば以下の状況を考えてみましょう
便利そうなライブラリAを使用したいのだが、このライブラリは更に別のライブラリB, Cを必要としている。さらに、ライブラリBはライブラリD, Eを。。。
ライブラリの依存性地獄です。
使用したいのはAなのに、そのために必要なライブラリがボコボコ必要になる
こんなのは日常茶飯事です。
でもcomposerがあればどうでしょう。
ライブラリAが欲しいなぁ、と思ったらその場で
```composer require A```
と打てば、Aと同時に必要なライブラリ群を参照して一緒にダウンロードしてくれるのです

引用：[PHP開発でComposerを使わないなんてありえない！基礎編](https://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94)

インストールはここから
[Introduction Composer](https://getcomposer.org/doc/00-intro.md#globally)

##Laravelの環境を整える

Laravelを使用するにはPHPの拡張モジュールが必要となるので、それらをインストールします。

参考：[【最新】PHPフレームワークLaravelのインストール入門編[5.6/5.5]](https://www.ritolab.com/entry/22)

##ブラウザで動作を確認する

環境ができたら、適当に.phpファイルを作成し、```echo```で```hello world```と出力してしましょう！

実行したいphpフォルダがあるディレクトリにて以下のコマンドを実行します。

```
php -S 127.0.0.1:8000
```
→ ブラウザで```127.0.0.1:8000/{.phpのフォルダ名}```をたたくと実行されているのが確認できます。


・localhostを起動する方法

```
php -S localhost:8000

```


##Laravelプロジェクト作成

アプリケーションを作成していくために、プロジェクトを作成しま。

laravelをインストールし、```hogeapp```というプロジェクトを生成する

```
 composer create-project laravel/laravel hogeapp

```

いろいろ作られます😳
<img width="200" height=""200 alt="スクリーンショット 2018-06-09 22.34.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/c160418d-579b-bf82-9825-04fc99d1e5c8.png">


##Laravel artisanコマンド

ArtisanとはLaravel専用のコマンドです。
アーティザン（アルティザン）と読み、『職人』という意味。Artisanコマンドを実行するとLaravelのコントローラやモデルの作成、マイグレーションの実行などが行えます。

>（マイグレーションとは）
データベースに変更を加える開発者が多い場合、チームの人はローカルでそのクエリ実行しなければなりません。開発者たちが更新事項を忘れることもあり得ます。 
そういう場合にマイグレーションを使うと、全ての変更はファイルとして保存されます。なので、開発者がその更新を反映させるためには、コードの変更をフェッチしてphp artisan migrateを実行するだけで済むのです。こうすることで開発者全員が常に同じデータベースを使って作業することができます。 

プロジェクト作成後、
php以下のコマンドでビルトインサーバーで動作を確認する事ができる

```
php artisan serve

```

初期状態ではこのような画面となる
<img width="500" alt="スクリーンショット 2018-06-09 13.38.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/8cafa2ef-d479-c253-9119-02d4a565c97d.png">

##DB設定

マイグレーションファイルの生成（新規テーブル作成）

```
 php artisan make:migration create_hoges_table --create=hoges
```

空のDBファイルを生成

```
touch database.sqlite
```

マイグレーションファイルを元にDBファイルを作成

```
php artisan migrate
```

##モデル作成

これで先ほど作成した```hoges```テーブルと紐づくモデルが作成できます。

```
php artisan make:model hoge
```

##ORM

モデルを単数系、DBのテーブル名を複数系として定義することで、モデルとテーブルが自動的に紐づいて処理できます。

（ex）
Animalモデル：animalsテーブル
Bookモデル：booksテーブル  


##LaravelでのViewについて
###blade
>Laravelのviewではbladeというテンプレートエンジンが使えます。ブレードはクラスのように階層化したテンプレートエンジンです。階層化されているので、たとえばフッターとかの決まりきった部分は基底クラスに定義して、bodyの中だけを書いたbladeを読みこむ、という使い方ができます。
[Laravelのbladeってやつをまとめてみた](https://ogatism.jp/techs/laravel_blade/)


ここまでのイメージはこんな感じです（routes.phpは現在のlaravelのバージョンではweb.phpに相当します）
<img width="600" alt="スクリーンショット 2018-06-09 17.08.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/138735/895d24ec-3cfd-bdf6-58f0-362f5f225238.png">

##ルーティングの設定

どのurlが叩かれたときにどんな処理をするか（どのviewを表示するか）を設定していきます。
```プロジェクト名/routes/web.php```にて記述

```.php

Route::group(['middleware' => ['web']], function(){
  Route::get('/', function(){
    // 処理
  });

  Route::post('/hoge', function(Request $request){
    // 処理
  });

  Route::delete('/hoge/{hoge}', function(Book $book){
    //　処理
  });
});

```

例えば、以下のようにすると、```hoge```テーブルから```hoge```モデルとして全要素を取り出し、```content```viewテンプレートに、```hoges```という名前で値を渡してviewを表示することができます。

```.php
Route::group(['middleware' => ['web']], function(){

  Route::get('/', function(){
    $hoges = hoge::all();
    return view('content', [
      'hoges' => $hoge
    ]);

  });

```

ここまでの手順のようにして、簡単なアプリケーションを作成することができるようになります。

##ログイン機能の実装

　```artisan```コマンドを使用することで容易にログイン機能を実装できます。

ログイン関係のviewを生成。```artisan```コマンドを使用します、便利！！

```
php artisan make:auth --views

```

「ログイン状態の場合〜する」という処理を入れる場合は以下のようにします。

```.php
Route::get('/', ['middleware' => 'auth', function(){
    $hoges = hoge::all();
    return view('hoges', [
      'hoges' => $hoges
    ]);
  }]);

```
このように```'middleware' => 'auth'```をクロージャーの前に挿入することで、認証チェックを入れることができます。


##豆知識

### phpにおける ```::``` と ```->```に違いについて

アロー(->)演算子を使う場合
インスタンスプロパティとインスタントメソッドにアクセスする

スコープ定義(::)演算子を使う場合
静的プロパティと静的メソッドにアクセスする

#おわり

こんな感じの流れで、Laravelの環境構築、サンプルアプリ作成、ローカル環境で動作確認ができます！

面白い！！
では良いエンジニアライフを！！