PHP
laravel

Laravelで開発を行う際に覚えておきたいことTipsまとめ

はじめに

最近Laravelを触り始めたので、自分用の開発リファレンスとしてまとめてみました。
Railsも良いんですが、やっぱりPHPの気軽さには惹かれました。
しばらくサーバーサイドはLaravelでやっていきたいです。

laravelのインストール

https://qiita.com/morisuke/items/bedb27418a65f6924fb1

プロジェクトの作成

$ composer create-project laravel/laravel projectname

以下の記事を参考にlaravelコマンドをインストールすると、もう少し簡単に作成することもできます
Laravel5のインストール方法とディレクトリ構成について

$ laravel new projectname

ローカルサーバーを起動する

以下のコマンドでlaravelに内蔵のWebサーバーが立ち上がります。

$ php artisan serve

コントローラーの作成

これで指定した名前でControllerが作成されます。

$ php artisan make:controller MyController

ルーティング

デフォルトではroutesディレクトリの中にある、web.phpの中でルーティング処理が記述されています。

Route::get('/', function () {
    return view('books');
});

ルーティングする際にDBからデータを取ってきてViewに渡したり、saveやdeleteも可能です。
簡単なアプリならControllerなしで書けるので便利そうです。

use App\Book;
use Illuminate\Http\Request;

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

    Route::get('/', function() {
        $books = Book::all();
        return view('books', ['books' => $books]); // Viewでbooksという変数名でアクセス可能
    });


    Route::post('book', function(Request $request) {
        $validator = Validator::make($request->all(), [
                'name' => 'required | max: 255',
        ]);

        if ($validator->fails()) {
            return redirect('/')
                ->withInput()
                ->withErrors($validator);
        }

        $book = new Book();
        $book->title = $request->name;
        $book->save();
        return redirect('/');
    });

    Route::delete('/book/{book}', function(Book $book) {
        $book->delete();
        return redirect('/');
    });

});

パラメーターの受け取り

パラメーターの受け取りは2つの方法で行うことができます。
違いはURLが異なることです。

アドレスにルートパラメーターを定義

show/01という形でアクセスできます。

UserController.php
public function show($id) {
  $data = ['id' => $id ];
  return view('show', $data);
}
web.php
Route::get('show/{id?}', 'UserController@show');

クエリー文字列の利用

show?id=01という形でアクセスできます。

UserController.php
public function show(Request $request) {
  $data = ['id' => $request->id ];
  return view('show', $data);
}
web.php
Route::get('show', 'UserController@show');

データベース

テーブルを作成するクラスを生成

以下のコマンドでbooksテーブルを作成するcreateBooksTableクラスをDatabase/migrationsディレクトリに生成してくれます。

$ php artisan make:migration create_books_table --create=books

マイグレーション実行時に、以下のメソッド内で実際のテーブル作成が行われるのでここに追加したいカラムを追加することが出来ます。

public function up() {
  Schema::create('books', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title'); // titleカラムを追加
    $table->timestamps();
  });
}

マイグレーションの実行

$ php artisan migrate

モデルの作成

booksテーブルに対応するモデルを作成します。
appディレクトリ配下にBook.phpが追加されます。
先頭文字は大文字にし、単数形にする必要があるので注意して下さい。

$ php artisan make:model Book

データベース接続設定

SQLite3対応

プロジェクトのルートフォルダ内の、.envファイルを開いて以下の指定をします。
この時DB_DATABASEでは、データベースファイルを一番上の階層から絶対パスで指定する必要があります。
たとえば、/home/username/projectname にLaravelのプロジェクトを作成した場合は以下のようなパスを指定する必要があります。

DB_CONNECTION = sqlite
DB_DATABASE=/home/username/projectname/database/database.sqlite

このやり方でsqliteを使う際は、デフォルトで記述されている以下の設定はいらないようなので削除しておきます。(Laravel同梱のsqliteで、usernameやpassword等の設定はしていないから?)

DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=homestead
DB_PASSWORD=secret

また/home/username/projectname/config/database.phpに以下のような指定を行います。

'default' => env('DB_CONNECTION', 'sqlite'),

DBの設定に関しては以上の2ファイルをイジる必要があります。

最後にdatabaseディレクトリ配下にdatabase.sqliteというファイルを作成します。
touchでもsqlite3でもどっちのコマンドでも可です。

$ touch database.sqlite
$ sqlite3 database.sqlite
SQLite version 3.13.0 2016-05-18 10:57:30
Enter ".help" for usage hints.
sqlite> .tables
sqlite> .exit

ユーザー登録・認証機能

Laravelでユーザー登録・認証機能を作成する(たぶん)最も簡単な方法