MAMPにLaravel5を使える環境を作ってみる

Laravel は、MVCのWebアプリケーション開発用の無料・オープンソースのPHPで書かれたWebアプリケーションフレームワークである。 LaravelはMITライセンスの下でリリースされており、そのソースコードはGitHubにホスティングされている。
（Wikipediaより）

laravelで使われてるコマンドや、文言、ちょっとしたことがよくわからないと思っていたところ、詳しく書かれている記事を見つけました。
初心者には助かります。。
[初めてのフレームワーク-Laravel5-1基本用語整理](http://qiita.com/k-okada/items/65332803aa79745e8f69)
[初めてのフレームワーク-Laravel5-2 構造、基礎メモ](http://qiita.com/k-okada/items/c92a3f3594d751d42740)
[初めてのフレームワーク-Laravel5-3 DB周り用語整理](http://qiita.com/k-okada/items/4dae1d5b25db8a7f3072)
[初めてのフレームワーク-Laravel5-4 エラー時の対策メモ](http://qiita.com/k-okada/items/0fa94f076d08584ee314)
[初めてのフレームワーク-Laravel5-5 DBアクセスメモ](http://qiita.com/k-okada/items/13a3814987fbecc9ae25)

参考URL
- [Laravel 公式サイト](http://laravel.com)
- [jp版](http://laravel.jp)
- [github](https://github.com/laravel/laravel)

DB設定については別記事
[MAMPにLaravel5を使える環境を作ってみる~DB設定編~](http://qiita.com/tagosaku324/items/3974ce60a181fc528236)

#環境設定
##Laravelをインストールする
インストールするのに以下の記事が参考になりました。
- [Laravelの環境設定＆開発体験自作Laravel5.1ミニマムチュートリアルまとめ](http://qiita.com/fumiyasac@github/items/78a335880f7abb1de8bf)
-[ComposerをMacにインストール方法](http://little-braver.com/686/)
-[Laravel 5.1 インストール](http://readouble.com/laravel/5/1/ja/installation.html)
Laravelをインストールする場合にはComposerが必須
Composerがない状態なので、インストールします。

参考URLの手順で行うことにします
>
1. MAMP内のhtdocsまで移動
2. composerを入手する
3. composerコマンドをどこからでも使用できるようにする <br>
=>入手した composer.phar をみんなが使える/usr/local/bin に移動しなくても ./composer.phar で実行できるのでその場でインストールすることにします。<br>
動くかどうかの確認は「 --version」で確認します。
4. Laravel5.1をインストールするhtdocsへインストール<br>
=>今回：pj_laravel5.dev　という名前でディレクトリができました。
5. 自分が作ったLaravel5.1のアプリケーションのstorageディレクトリのパーミッションを変更する
=>変更しないと「drwxr-xr-x 」です。storage下とbootstrap/cacheディレクトリをWebサーバーから書き込み可能にしておく必要があるそうです。

＜インストールのときは注意しよう＞
今までインストールのとき記事をそのまま信じて実行してしまっていましたが、トロイの木馬とか仕込まれている実行ファイルを知らないうちに実行してしまうかもしれません。
curlコマンドがよくわからなかったので[こちら](http://takuya-1st.hatenablog.jp/entry/20121121/1353477494)を参考にしました。
curlコマンドはURL先を標準出力へ出力するだけですが、今回 「| php」となっているので、URLの先はPHP実行ファイルだろうと推測できます。
URL先に自信がない時|をとって実行してみると、ソースファイルが標準出力に流れますので確認してみるといいと思います。

＜composerを実行してできたファイルcomposer.pharの扱い＞
みんなが使うならば[参考URL](http://qiita.com/fumiyasac@github/items/78a335880f7abb1de8bf)のように「/usr/local/bin/」の下に mv してしまって良いかもしれません。
自分だけしか使わないならば、自分用のbin
今回しか使わないのならばcomposer.pharが作られたそのままの場所で実行すればいいです。
パスを通して名前を「composer」に変更すれば動きますが、パスを通さなくても名前を変えなくても「./composer.phar」で動きます。

```
$ cd /Applications/MAMP/htdocs/
$ curl -sS https://getcomposer.org/installer | php
$ ./composer.phar --version
Composer version 1.0-dev (72cd6afdfce16f36a9fd786bc1b2f32b851e764f) 2015-12-28 17:35:19
$ ./composer.phar create-project laravel/laravel *****  --prefer-dist
// *****は好きなプロジェクト名をつけます。今回：pj_laravel5　とした
$ ls
composer.phar	index.html	pj_laravel5
$ chmod -R 775 pj_laravel5/
$ chmod -R 777 pj_laravel5/storage/
```
別のアプローチ。
composer.pharをブラウザの閲覧場所じゃなくて自分環境の適当な場所に置いたとしたらこんな感じでインストール実行できます。
インストールにはちょっと時間がかかりますので終わるまで待つように。。。

```
$ /usr/bin/php ~/bin/composer.phar --version
Composer version 1.0-dev (03299ff075236be27be356498d6c64def973fe41) 2016-01-10 20:34:53
$ /usr/bin/php ~/bin/composer.phar create-project laravel/laravel pj_laravel5 --prefer-dist
Installing laravel/laravel (v5.2.0)
  - Installing laravel/laravel (v5.2.0)
    Downloading: 100%         

Created project in pj_laravel5
> php -r "copy('.env.example', '.env');"
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing vlucas/phpdotenv (v2.2.0)
    Downloading: 100%
:
:
> php artisan key:generate
Application key [Df636u629y4wMpOlYy4seUO9EDkPEEDz] set successfully.
$ 
```

#Laravelをブラウザでみれるようにする
1. MAMP内のVirtualhostの設定
2. hostsの設定
3. MAMPを再起動、http://pj_laravel5.dev:8888/ にアクセス

```title:/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
<VirtualHost *:8888>
    DocumentRoot "/Applications/MAMP/htdocs/pj_laravel5/public"
    ServerName pj_laravel5.dev
    ErrorLog /Applications/MAMP/logs/pj_laravel5_error_log
    CustomLog /Applications/MAMP/logs/pj_laravel5_access_log common
</VirtualHost>
```
```title:/etc/hosts
127.0.0.1 pj_laravel5.dev //こちらを追記
```
Laravelインストール完了後の画面がちゃんと出ました。
[http://pj_laravel5.dev:8888/]
![4f.png](https://qiita-image-store.s3.amazonaws.com/0/39911/707bc86a-1ad0-2ddc-802f-807074c4c597.png)

インストールされているLaravelのバージョンを確認もしてみました。

```
$ cd pj_laravel5/
$ php artisan --version
Laravel Framework version 5.2.6
```
上記確認ができないということは、Laravelで開発する上で超重要になるartisanコマンドが使えないことになります。
Laravel5.1はPHPのバージョンが5.5.9以上が必要ということを踏まえて、何も変更していなければ、PHPのバージョンがMacに入っているものになっています。

```title:私の場合
$ php  --version
PHP 5.5.29 (cli) (built: Sep  6 2015 20:20:34) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
```
Laravel5.1は動きそうですが、PHPのバージョンが高いほうがよさそうなので、MAMPのPHP（バージョン5.6.10）を読むようにします。

```title:~/.bash_profile
export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH //追記
```
ターミナルを立ち上げ直せば which php で変わったのが確認できます。

#Laravelの環境設定&初期設定
Laravelは環境ベースの設定が行えます。
アプリケーションのルートディレクトリにある.envファイルで環境設定できます。
ローカル環境と実環境が違う場合も、これで設定しておけば便利です。

参考：[Laravel5初期設定&環境設定まとめ](http://raichel.hatenablog.com/entry/2015/04/20/010752)

```title:config/app.php
 :
 55     'timezone' => 'Asia/tokyo',
 :
 68     'locale' => 'ja',
 :
```

#welcomeページを変えてみる
トップページがwelcomeページなのでこれを変えてみます。
参考：[ルーティング設定してみるのあたりから](http://qiita.com/n0bisuke/items/80b419674fcdabc6c2e7#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)

##方法1. ルーティング設定
URLのパスの最初に入ってくるページを設定できます。
>
1. app/Http/routes.phpを編集
2. http://pj_laravel5.dev:8888/text
アクセスしてみて「こんにちは！」が表示されれば成功

```title:app/Http/routes.php　17行目あたりに新規に追加
  1 <?php
  2 
  3 /*
  4 |--------------------------------------------------------------------------
  5 | Routes File
  6 |--------------------------------------------------------------------------
   :
   : 
 18 /*追加*/
 19 Route::get('text', function () {
 20     Log::debug('URL "text" にアクセスされました。');
 21   return 'こんにちは!';
 22 });
```
![スクリーンショット 2016-01-12 0.33.45.png](https://qiita-image-store.s3.amazonaws.com/0/39911/0c7f73cc-8725-0608-f3bf-53d85f93ecfd.png)
app/Http/routes.phpに追加したルートは一覧で確認をすることができます。

```title:今追加した「text」が追加されているのがわかる
$ php artisan route:list
+--------+----------+------+------+---------+------------+
| Domain | Method   | URI  | Name | Action  | Middleware |
+--------+----------+------+------+---------+------------+
|        | GET|HEAD | /    |      | Closure |            |
|        | GET|HEAD | text |      | Closure |            |
+--------+----------+------+------+---------+------------+
$
```
※ Log::debug();をいれておくと、storage/logs/laravel.logにログがたまっていくみたいです。

Json配列表示なんてこともできるそうで、 returnに配列指定するだけでjsonにしてくれます。

```title:app/Http/routes.phpに追加
Route::get('array', function () {
  return ['now' => 'Laravel5体験！', 'date' => new DateTime];
});
```
http://pj_laravel5.dev:8888/array
にアクセスしてみます。
![スクリーンショット 2016-01-12 1.16.04.png](https://qiita-image-store.s3.amazonaws.com/0/39911/d1818dd7-cf97-1b85-6d5a-6676f453138e.png)


##方法2. Appコントローラークラスを生成
Laravelフレームワークに沿ってコントローラーを作る場合、固有の名前＋Controllerと名付けるのがルールらしい。
参考：[Laravel 5 コントローラーを触ってみた](http://warpvillage.com/archives/489)
>
1. app/Http/Controllers/AppController.phpを生成させる
2. app/Http/Controllers/AppController.phpを編集する
3. app/Http/routes.phpにコントローラメソッドを追加する
4. http://pj_laravel5.dev:8888/status アクセスしてみて「コントロールメソッドを作成」が表示されれば成功

```title:コントローラー生成
$ php artisan make:controller AppController
Controller created successfully.
```
```title:app/Http/Controllers/AppController.phpが生成された
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class AppController extends Controller
{
    //
}
```
```title:app/Http/Controllers/AppController.phpを編集
class AppController extends Controller
{
    //追加
    public function status(){
      return 'コントロールメソッドを作成';
    }

}
```
statusメソッドが使えるようになりました。
このコントローラーメソッドをブラウザ表示するには、app/Http/routes.phpに追加します。

```title:app/Http/routes.phpに追加
Route::get('status', 'AppController@status');
```
![スクリーンショット 2016-01-12 1.14.30.png](https://qiita-image-store.s3.amazonaws.com/0/39911/feb18de7-92c9-cce4-26c4-fb5e3b02cf85.png)

##方法3. viewを作成
>
1.routes.php のwelcomeをsampleに変える。
2./resources/views/sample.blade.phpを作る

ブラウザに表示されている画面をおってみると
app/Http/routes.php　でview('welcome')を呼び出している
これはresources/views/welcome.blade.php　ということがわかる。

```title:app/Http/routes.php
Route::get('/', function () {
    //return view('welcome');
    return view('sample');
});
```
```title:/resources/views/sample.blade.php
<html>
 <head>
 <title>初めてのLaravel5</title>
 </head>
 <body>
 <h1>Sampleページです</h1>
by tagosaku
 </body>
</html>
```

4.ブラウザにアクセス！
welcomeページが変わりました！

![スクリーンショット 2016-01-05 20.29.07.png](https://qiita-image-store.s3.amazonaws.com/0/39911/9c67dc32-52e2-a270-efce-1b7488b80393.png)

sample.blade.php とファイル名を真似て書きましたが、sample.phpで普通に出てきました。
ピリオドの前までの名前で出てくるのね。

こうやってつながっているのね・・・