初めてのLaravel（PHP Framework）

```
自分なりのまとめです。
参考にしていただければ幸いですが、参考にして不具合等が起きた場合、保障はできませんのであしからず。
間違い等あればご教授いただけると助かります。
```

# 環境準備

## Windows
　元の環境：Windows8.1, xampp1.8.3(PHP 5.5.15)
　Database：postgreSQL 9.3.5

### 1. composerのインストール
  参考サイト様：[xampp for windows で composer](https://opensource-workshop.jp/jomaxnt8r-826/)
　・ ` composer install ` を実行する場所が存在しなかった件。
  ⇒ xampp/phpMyAdmin に「composer.json」があったので、ここでインストール。
　・ 『 あれ、phpのパスが通ってない・・・？記述ちゃんと一つだけだし、パスもあってるのに・・・ 』
　⇒ シェル(ちなみにBash使ってました)が問題でした(;^ω^) cmdかps使えよってことですね(´・ω・`)
　　　
　殆ど問題なくインストール完了。

### 2. Laravelのインストール
　1) ` composer global require "laravel/installer=~1.1" `
　2) ` C:\Users\xxx\AppData\Roaming\Composer\vendor\bin ` を環境変数に追加
　　Laravelのコマンドが使えるようになる（2014/11/25 今のところ必要なシーンが思い浮かばないです）

## Ubuntu
  元の環境：Ubuntu14.02, PHP 5.5.9, apache 2.4.7
　**工事中**
# プロジェクト作成
※違いはlaravelコマンドの方が少し早いだけだとか...
### 1. composerコマンド
　　` composer create-project laravel/laravel hogeproject --prefer-dist `
　　※オプションについては [こちらのサイト様](http://9ensan.com/blog/programming/php/php-composer-cli/) でまとめてありました。
　　違い①：cohfig/app.php の 'key' が自動生成される。(laravelコマンドでの方法は不明)　
　　違い②：App::getBootstrapFile() で返されるパスがローカルのパスになっている
　　違い③：ちょっとお待ちを...
　 
### 2. laravelコマンド
　　` laravel new hogeproject `

# 初期設定

### タイムゾーンと言語

 ```lang:config/app.php
　　　# キー(composerのコマンドで生成した場合は自動生成されているかもですが、32文字の乱数を設定するようにしてください)
　　　`key`   => 'hogehoge',
      # タイムゾーン
　　　'timezone' => 'Asia/Tokyo', 
　　　# 言語 
　　　'locale' => 'ja', 
 ```

### 動作環境の設定
```lang:bootstrap/start.php
$env = $app->detectEnvironment(array(

	'local' => array('hogehoge'), # hostnameコマンドで返ってきた端末名

));
```

# ブラウザから初期画面を確認
　　ドキュメントルート：hogehoge/public
　　参考サイト様：[Laravel4のインストールと初期設定/株式会社Nextat（ネクスタット）](http://nextat.co.jp/staff/archives/12)
　　上記サイト様を参考に、 ` \xampp\apache\conf\extra\httpd-vhosts.conf ` に追記
　　合わせて ` C:\Windows\System32\drivers\etc\hosts `にバーチャルネームを追記
　　http://hoge.localhost/ にアクセスするとLaravelのロゴ画像が表示されるはず。

# アクセス先を変えてみる
基本、routes.phpにアクセスパターン(post/get)とその後のアクションを記載していく。

### Level1
アクセス先：http://hoge.localhost/users

```lang:hoge/app/routes.php(追記)

    Route::get('users', function()
    {
	return "Hello!";
    });


```

⇒ この場合、画面上に「Hello!」と印字される。

### Level2
アクセス先：http://hoge.localhost/Homes

```lang:hoge/app/routes.php

    Route::get('Homes', 'HomeController@index');

```

```lang:hoge/app/controllers/HomeController.php

class HomeController extends BaseController {

	public function index()
	{
		return View::make('home/index');
	}

}

```

```lang:hoge/app/views/home/index.php

    <?php echo "TOPページです！" ?>

```
⇒この場合、『TOPページです！』と印字される。 

ここは後々追記していきますー。

# DB接続
使用環境：postgreSQL v9.3.5
ＤＢ名：laravel_pj

### 設定
２か所書き換え

```lang:app/config/database.php

29|　　'default' => 'pgsql',
--|
--|    # ここの記述に関しては app/config/local/database.php にも同じ記載が必要なようです。
--|    # なぜ記載を分けているのかわかってませんが、マイグレーションを使用する際に必要になります。 
66|    'pgsql' => array(
67|       'driver'   => 'pgsql',
68|　　　　'host'     => 'localhost',
69|　　　　'database' => 'laravel_pj', # 書き換え
70|　　　　'username' => 'hoge', # 書き換え
71|　　　　'password' => 'hoge', # 書き換え
72|　　　　'charset'  => 'utf8',
73|　　　　'prefix'   => '',
74|　　　　'schema'   => 'public',
75|    ),
```
# マイグレーション

## マイグレーションの作成
作成されたマイグレーションは `hoge/app/database/migrations ` の下に作成されていく。

### m_usersというテーブルを作成するマイグレーション
cmd : `php artisan migrate:make create_m_users_table --create=m_users`


▼ 作成されたファイル

```lang:app/database/migrations/2014_11_26_132053_create_m_users_table.php
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMUsersTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('m_users', function(Blueprint $table)
		{
			$table->increments('id');
			$table->timestamps();
		});
	}
	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('m_users');
	}
}
```
### 自動生成される関数について
- **up()** … 追加したい指示を記載する。（テーブルを追加する場合はcreate文にあたる記述、フィールドを追加する場合はalter文にあたる記述を）
- **down()** … 追加したい指示を取り消せる記載をする。（テーブルを追加する場合はdrop table文にあたる記述、フィールドを追加する場合は元の状態に戻すalter文にあたる記述を）

## 作成されたマイグレーションの書き換え
ファイルを直接書き換えました。↑で作成したm_userテーブルにフィールドを追加します。
参考サイト様：[DB:スキーマビルダー](http://laravel4.kore1server.com/docs/schema)

```lang:app/database/migrations/2014_11_26_132053_create_m_users_table.php
        # 今回の場合、up()のみ書き換え。
	public function up()
	{
		Schema::create('m_users', function(Blueprint $table)
		{
			$table->increments('id');
			$table->string('user_code');
			$table->string('user_name');
			$table->string('user_pswd');
			$table->string('user_photo');
			$table->boolean('del_flg');
			$table->integer('created_user');
			$table->date('created');
			$table->integer('updated_user');
			$table->date('updated');
			$table->integer('deleted_user');
			$table->date('deleted');
		});
	}
```


## マイグレーションの実行
cmd：`php artisan migrate`

- エラー１

```
  [PDOException]
  could not find driver
```
php.iniの ` extension=php_pdo_pgsql.dll ` がコメントアウトされていないか確認。
（mysqlの場合は ` extension=php_pdo_mysql.dll ` )
参考：[Laravel4のhomesteadでmigrateしようとしたら「SQLSTATE[HY000] [2002] 対象のコンピュータによって拒否されたため、接続できませんでした。」でハマった件](http://blue-goheimochi.hatenablog.com/entry/2014/10/16/Laravel4のhomesteadでmigrateしようとしたら「SQLSTATE%5BHY000%5D_%5B2002%5D_対象のコン)

- エラー２

postgreSQL↓

```
[PDOException]
 SQLSTATE[08006] [7] FATAL:  ユーザ"homestead"のパスワード認証に失敗しました
```

MySQL↓

```
[PDOException]
  SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)
```

app/config/database.php と app/config/local/database.php の設定をもう一度確認してみる。
ポートを指定してみる。 ` 'host'=>3306 ` を 'pgsql' の配列の最終行に追加する。　
参考：https://laracasts.com/forum/?p=1804-access-denied-for-user-homestead-localhost/3

**ベースはできた？のであとは実践。また別で投稿します～**

# 参考サイト
0. [Larabel v4.2 本家](http://laravel.com/docs/4.2) { 英語 )
1. [Larabel v4.2:クイックスタート](http://laravel4.kore1server.com/docs/installation) { 翻訳版 )
2. [株式会社Nextat（ネクスタット）](http://nextat.co.jp/staff/archives/tag/Laravel)  { 応用 )