ベータ4がリリースされました。どんなふうに変わっているのかを紹介するため、認証にも使用するUserクラスを使用して、紹介していきます。現在の開発バージョンはベータ5で、正式版リリースまで後約1から2ヶ月です。5月リリース予定ですからね。正式版では変更される部分もあると思います。タイトルはCRUDですが、今回行うのはCUまでです。残りのRDは応用で、簡単ですからね。皆さん自分で試してください。usersテーブルの準備データベース設定ファイルの内容はほぼ変更ありません。Laravel3の時と同様に設定してください。データベースを設定したら、マイグレーション初期化のため、管理テーブルを作成しましょう。Artisanコマンドラインツールを使用します。artisanだけ打ち込むと、コマンドを表示してくれます。忘れた時の確認に使用できます。環境の設定はLaravel3の頃と変わりません。--env=localでローカル環境、つまりconfig/localフォルダー中の設定ファイルの内容が優先して使用されます。マイグレーション初期化が終了しましたら、usersテーブルを生成するマイグレーションを書きましょう。usersテーブルの生成はコマンドによる自動化がされていません。私はこれに賛成します。usersテーブルにどの様な情報を入れるか、どの項目を認証に使用するかは、開発者やプロジェクトごとに差がある部分ですから、自動化する意味があまりないと思っています。(ぶっちゃけ、一度作成した他のプロジェクトからコピーしたほうが早いし、分かりやすいですからね。)まずは、マイグレーションファイルを生成しましょう。CreateUsersTable基本的にはLaravel3と変わりません。Laravel4からcomposerに乗っかりPSR-0とかPSR−1とか2とかに準拠する関係上、関数名はローアーキャメル、クラス名はアッパーキャメル記法ですので、それに合わせています。コマンド実行するとapp/database/migratationsに作成日時と指定したクラス名のファイル名がついたphpファイルが生成されます。それをエディターで開いてください。内容を以下のように更新し、保存します。}}テーブル生成はLaravel3と同じです。ドロップでは、dropIfExistsメソッドが追加されました。これは、メソッド名が示す通り、テーブルが存在する場合にドロップを行うものです。マイグレーションの順番を間違えたり、生成でエラーが置きたりした結果、テーブルができていないのにdown()のドロップを行い、エラが発生し、マイグレーションのロールバックが上手く動作しないことがLaravel3ではありました。それを防ぐためこのメソッドが作成された様子です。基本、down()メソッドの中では、このdropIfExistsメソッドを使用しましょう。マイグレーションファイルを作成したら、マイグレーションを実行しましょう。migrate実際に作成されていることを、ツール類で確認してみましょう。続いてサンプルデータの生成を行いたいところですが、先にUserクラスを作リましょう。現在のベータ4ではUserクラスのひな形がapp/modelsディレクトリーに用意されています。以下のように多少変更してください。}}Eloquentモデルです。デフォルトではクラス名複数型の小文字がテーブル名になります。Laravel3と大きく異なるのはコンストラクタやfillメソッドで、配列を指定することでキーと同じ名前のインスタンスのプロパティーに代入してくれる複数代入の機能です。Laravel3では、デフォルトでは全項目代入可能になっていました。Laravel4ではセキュリティー的に強化するため、全項目代入禁止になっています。$guardedか$fillableプロパティーを指定し、代入禁止、もしくは代入許可を指定する必要があります。セッター(ミューテーター)のメソッド名も変更になりました。set属性名Attributeです。シーディングさて、シーディングへ戻りましょう。データベースの初期データ設定をシーディング(seeding)と言います。シーディングのための機能も追加されました。ベータ期間中も、かなり変更されている部分です。app/database/seedsディレクトリーにシーディングのためのクラスを定義しましょう。今回はUsersTableSeeder.phpファイルです。}}シーディングに使用するクラスはSeederクラスを拡張し、中にrunメソッドを用意します。内容はご覧の通りです。先にユーザークラスを作成していますので、パスワードなどもそのまま記述できます。これを実行するには以下のArtisanコマンドを実行します。UsersTableSeederこれでUsersテーブルにサンプルデータが生成されました。いちいちクラス名を指定するのは面倒です。実はクラス名を指定しない時のデフォルトはapp/database/seedsのDatabaseSeeder.phpで定義されているDatabaseSeederクラスになっています。このrunメソッドから、自分で作成したシーディングクラスを呼び出すようにすることで、まとめてシーディングが実行できるようになっています。}}これで、まとめてシーディングを実行したい時はクラスを指定しないでdb:seedを実行し、個別にシーディングしたい場合はクラス名を指定して実行するというように、使い分けができるようになりました。説明が長くなりますので、今回ルートはコントローラではなくrouts.phpに記述します。app/views/user/create.blade.phpです。}}Formクラスが復活したため、Laravel3とたいして違いがありません......実は、違わないように書いてみました。このように、ほぼ同じようにかけます。Laravel3で身につけたスキルが無駄になるわけでありません。これでは面白くありませんね。Laravel4の機能を活用して、今度は更新処理を書いてみましょう。更新処理ルートの部分です。);Laravel4ではルートの可変部分に名前を付けられるようになりました。他のフレームワークでもできるものが多いですよね。その名前にEloquentモデルを結びつけることができます。後は、ルートをご覧いただくと分かります。{user}部分にIDが来るわけです。そのIDがテーブルに存在しなければ、404エラーになります。Laravel3でまともに動作するCRUDを書けば必ずIDのチェックは必要でした。(Laravel3でなくても、何を使おうと必要です。)Laravel4はIDのチェックを取り込んでしまいました。ルートの内側に制御が渡ってきた時点で$userのユーザー情報はテーブル上に存在しており、$userはそれを獲得したものですので、安心して使用できます。今度はビューをご覧ください。app/views/user/update.blade.phpです。}}createビューとどこが違うか、分かりますか。フォームのオープンがopenメソッドの代わりにmodelメソッドを使用しています。この機能のためにFormクラスを復活させたのだと思われます。modelメソッドで開くと、フォームの入力要素の生成メソッドで、渡したEloquentモデルのインスタンスの属性名と同じフィールド名の値を表示してくれるのです。フォーム入力内容の処理でバリデーションエラーが発生した場合、リダイレクトに対してwithInputメソッドで入力値をフラッシュデーターとしてセッションに保存しますが、セッション中に入力項目と同じキーのアイテムが保存されている場合、優先的にそちらを表示してくれます。...)))なんて形で指定する必要がありません。ご覧の通り、すっきりです。楽しいでしょう?次は認証を見てみましょう。こちらも便利になっていますよ。