デフォルトでユーザ認証までついてるLaravel5。
世界で人気No.1のPHPフレームワークにとりあえず入門です!
目次
プロジェクト作成
【インストール】
C:\xampp\htdocs>composer create-project laravel/laravel lara
C:\xampp\htdocs>cd lara
C:\xampp\htdocs\lara>php artisan -V
Laravel Framework 5.6.29
【アプリケーション設定】
config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
【エラーメッセージ日本語化】
C:\xampp\htdocs\lara>composer require laravel-ja/comja5
C:\xampp\htdocs\lara>composer update
C:\xampp\htdocs\lara>vendor\bin\comja5 -a
resources/lang/ja ┣auth.php ┣pagination.php ┣passwords.php ┣README.md ┗validation.php
【データベース設定】
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
ユーザ認証
【マイグレーション】
すでにdatabase/migrationsにusersテーブルとpassword_resetsテーブルのデータがあるのでマイグレーション。
C:\xampp\htdocs\lara>php artisan migrate
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
ん~~~ん。。。早速のトラブル—– orz
MySQLのユニーク制約の最大バイト数は767bytes。
Laravel5.4以降、標準のcharsetがutf8mb4になり1文字4bytes。
email varchar(255)の最大バイト数は 4*255=1020bytes でエラーだと。
ちなみにutf8なら3*255=765bytes。
MySQL5.7.7、MariaDB10.2.2では解消されてるらしい。
◆Laravelのcharset変更で対応。
config/database.php
'connections' => [
・・・
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
// 'charset' => 'utf8mb4',
// 'collation' => 'utf8mb4_unicode_ci',
'charset' => 'utf8', // 変更
'collation' => 'utf8_unicode_ci', // 変更
C:\xampp\htdocs\lara>php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
【パスワードリセット用メール設定(Gmail用】
.env
APP_URL=http://*****.com # パスワードリセットリンクのURL設定
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=*******@gmail.com
MAIL_PASSWORD=*******
MAIL_ENCRYPTION=tls
【認証機能生成】
C:\xampp\htdocs\lara>php artisan make:auth
・routes/web.phpに/homeが追記される
・app/Http/Controllers/HomeController.phpが生成される
・resources/viewsに必要なビューが生成される
/homeにアクセスすると/loginにリダイレクトされ認証画面に
あら簡単!
【要認証ページの設定】
以下のように認証が必要なコントローラーのコンストラクタでmiddleware(‘auth’)を呼び出すだけ。
public function __construct()
{
$this->middleware('auth');
}
【情報取得】
Session情報取得
use Session;
$session = Session::all();
ログインユーザ情報
use Auth;
$user = Auth::user();
ルーティング
ルーティングで使用する主なHTTPメソッドは
GET 取得
POST 作成
PUT 置換
PATCH 更新
DELETE 削除
【メソッドを指定してルーティング】
routes/web.php
# GETメソッドでsampleへのアクセスはSampleコントローラーのindexメソッドへ
Route::get('sample', SampleController@index');
# GETメソッドでsample/{id}へのアクセスはSampleコントローラーのshowメソッドへ
Route::get('sample/{id}', SampleController@show');
# GETメソッドでsample/createへのアクセスはSampleコントローラーのcreateメソッドへ
Route::get('sample/create', SampleController@create');
# POSTメソッドでsampleへのアクセスはSampleコントローラーのstoreメソッドへ
Route::post('sample', SampleController@store');
# GETメソッドでsample/{id}/editへのアクセスはSampleコントローラーのeditメソッドへ
Route::get('sample/{id}/edit', SampleController@edit');
# PATCHメソッドでsample/{id}へのアクセスはSampleコントローラーのupdateメソッドへ
Route::patch('sample/{id}', SampleController@update');
# DELETEメソッドでsample/{id}へのアクセスはSampleコントローラーのdestroyメソッドへ
Route::delete('sample/{id}', SampleController@destroy');
【Resourcefulルーティング】
上記のルーティングをまとめて1行で設定できる。
Route::resource('sample', 'SampleController');
※ただし、必要なルーティングだけを記述すべし。
Route::resource('sample', 'SampleController', ['only' => ['index','show']]);
method | URL | Action |
---|---|---|
[GET] | sample | index |
[GET] | sample/{id} | show($id) |
[GET] | sample/create | create |
[POST] | sample | store |
[GET] | sample/{id}/edit | edit($id) |
[PUT/PATCH] | sample/{id} | update($id) |
[DELETE] | sample/{id} | destroy($id) |