他愛もないことだけど覚書。
例えば “123,456”(文字列) を 123456(数値) に変換したいような場合、str_replace関数を使うのが手っ取り早いか。
1 2 |
$str = "123,456"; $val = str_replace(",", "", $str); |
参考サイト
PHP: str_replace – Manual
http://php.net/manual/ja/function.str-replace.php
最近はウェブ系アプリ中心、あとWindowsアプリちょっと
他愛もないことだけど覚書。
例えば “123,456”(文字列) を 123456(数値) に変換したいような場合、str_replace関数を使うのが手っ取り早いか。
1 2 |
$str = "123,456"; $val = str_replace(",", "", $str); |
PHP: str_replace – Manual
http://php.net/manual/ja/function.str-replace.php
必要に迫られて、Laravelで使えるシンプルなショッピングカートのパッケージ探す。
ググると以下のスレッドがヒット。
Simple shopping cart
https://laracasts.com/discuss/channels/general-discussion/simple-shopping-cart?page=1
紹介されているパッケージをリスト。
GitHub – Crinsane/LaravelShoppingcart: A simple shopping cart implementation for Laravel
https://github.com/Crinsane/LaravelShoppingcart
GitHub – kingpabel/LaravelShoppingcart: A simple shopping cart implementation for Laravel 4 & 5
https://github.com/kingpabel/LaravelShoppingcart
GitHub – anam-hossain/phpcart: Simple framework agnostic shopping cart
https://github.com/anam-hossain/phpcart
GitHub – moltin/laravel-cart: Laravel Facade and Service Provider for Moltin\Cart
https://github.com/moltin/laravel-cart
GitHub – anam-hossain/phpcart: Simple framework agnostic shopping cart
https://github.com/anam-hossain/phpcart
Cart Manual :: Cartalyst
https://cartalyst.com/manual/cart/2.0#laravel-5art/2.0
今回は先頭のパッケージを使わせてもらうことにする。一番最近までメンテされていてユーザが多そうなのが理由。
認証処理(といっても主にファイルの所在やクラスの構成)が5.2から変わっているので、解説しているサイトを覚書リンク。
Authentication Enhancements in Laravel 5.3 – Sponsor – Laravel News
https://laravel-news.com/2016/08/authentication-enhancements-in-laravel-5-3-sponsor/
Improvements to authentication in Laravel 5.3
https://josephsilber.com/index.php/posts/2016/07/10/authentication-improvements-in-laravel-5-3
Gate and authorization improvements in Laravel 5.3
https://josephsilber.com/index.php/posts/2016/08/03/authorization-improvements-in-laravel-5-3?utm_source=laravel_news&utm_medium=sp&utm_campaign=laravel5.3_auth
以下ページの説明にとても助けられたので覚書リンク。
Laravel 5で確認画面付き問い合わせフォームを作る – Qiita
http://qiita.com/ponko2/items/fd7ac38b964e10f16f52
Laravelでプロジェクトを作成したらまずやることメモ – Qiita
http://qiita.com/ponko2/items/f2f59b43dae1561ceb50
以下の要件を想定
以下、実装手順をざっくり。
標準のAuthを有効化する
1 |
php artisan make:auth |
adminsテーブルを作成
1 |
php artisan make:migration create_admins_table --create=admins |
とりあえずadminsテーブルの構成はusersテーブルと同じにしておく。
Adminモデルを作成
1 |
php artisan make:model Admin |
とりあえずAdminモデルの構成はUserモデルと同じにしておく。
マイグレーション実行
1 |
php artisan migrate |
Authの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
// config/auth.php return [ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], 'user' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'password_resets', 'expire' => 60, ], ], ]; |
実装の手間を減らすために、標準のログインの仕組みを可能な限り流用する方針で行く。
標準のログインコントローラ(app/Http/Controllers/Auth/LoginController.php)をapp/Http/Controllers/Admin/Auth/LoginController.phpへコピーして、管理者ログイン用にカスタマイズする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
namespace App\Http\Controllers\Admin\Auth; use ... class LoginController extends Controller { use AuthenticatesUsers; protected $redirectTo = '/admin/home'; //管理者ログイン成功後のジャンプ先 public function __construct() { $this->middleware('guest', ['except' => 'logout']); } public function showLoginForm() { return view('admin.auth.login'); //管理者ログインページのテンプレート } protected function guard() { return Auth::guard('admin'); //管理者認証のguardを指定 } } |
標準のログインページのテンプレート(resources/views/auth/login.blade.php)をresources/views/admin/auth/login.blade.phpへコピーして、管理者ログイン用にカスタマイズする。
1 2 |
{{-- 最低限actionのurlは変更必要 --}} <form class="form-horizontal" role="form" method="POST" action="{{ url('/admin/login') }}"> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// app/Exceptions/Handler.php class Handler extends ExceptionHandler { protected function unauthenticated($request, AuthenticationException $exception) { if ($request->expectsJson()) { return response()->json(['error' => 'Unauthenticated.'], 401); } //追加 if (in_array('admin', $exception->guards())) { return redirect()->guest('admin/login'); } //追加 return redirect()->guest('login'); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// routes/web.php Auth::routes(); Route::get('/home', 'HomeController@index'); Route::group(['prefix' => 'user'], function() { Route::get('/', 'UserController@index'); Route::get('/home', 'UserController@index'); }); Route::group(['prefix' => 'admin'], function() { $this->get('login', 'Admin\Auth\LoginController@showLoginForm'); $this->post('login', 'Admin\Auth\LoginController@login'); $this->post('logout', 'Admin\Auth\LoginController@logout'); Route::get('/', 'Admin\HomeController@index'); Route::get('/home', 'Admin\HomeController@index'); }); |
1 2 3 4 5 6 7 8 9 10 11 12 |
// UserController.php namespace App\Http\Controllers; use ... class UserController extends Controller { public function __construct() { $this->middleware('auth:user'); } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
// Admin/HomeController.php namespace App\Http\Controllers\Admin; use ... class HomeController extends Controller { public function __construct() { $this->middleware('auth:admin'); } } |
Authentication – Laravel
https://laravel.com/docs/5.3/authentication
wp_userテーブルにレコードを追加してやれば良さそう。
パスワードハッシュの生成はwp-includes/class-phpass.phpに定義されているPasswordHashというクラスで行っているようなので、これをコピーしてきて外部アプリから呼んでやれば良さそう。
というわけで、Laravelだとこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
require_once(app_path() . '/class-phpass.php'); // Add user. $phpass = new \PasswordHash(8, true); $user = new WpUser(); $user->user_login = $data['username']; $user->user_pass = $phpass->HashPassword($data['password']); $user->user_nicename = $data['username']; $user->user_email = $data['email']; $user->user_url = ''; $user->user_registered = Carbon::now(); $user->user_activation_key = ''; $user->user_status = 0; $user->display_name = $data['username']; $user->save(); |
【WordPress】wp_usersテーブルを流用してログイン機能を作る at softelメモ
https://www.softel.co.jp/blogs/tech/archives/3793
モデルクラスの$timestamps変数をfalseにセットすればよい。
1 2 3 4 5 |
class WpUser extends Model { public $timestamps = false; }; |
timestampを無効にする場合 – ふたりはララベル (Laravel PHP Framework)
http://laravel.hatenablog.com/entry/2013/10/19/004831
自分はデザイナじゃないけど、トレンドと言われると目を通しておかないとと思ってしまう。
2015〜2016年のWebデザイントレンドまとめ(前編) | デザインのトレンド
https://liginc.co.jp/291343
2015〜2016年のWebデザイントレンドまとめ(後編) | デザインのトレンド
https://liginc.co.jp/301949
まだ仕様策定中とのことで、あくまで予備知識。
仕様策定中のCSS Grid Layout Moduleによるグリッドレイアウト入門 – WPJ
https://www.webprofessional.jp/introducing-the-css-grid-layout/
最新!CSS Grid Layout ModuleのW3C仕様策定動向まとめ – WPJ
https://www.webprofessional.jp/where-things-are-at-in-the-css-grid-layout-working-draft/
必要に迫られて探してみた。
GitHub – inacho/php-credit-card-validator: Validates popular debit and credit cards numbers against regular expressions and Luhn algorithm. Also validates the CVC and the expiration date.
https://github.com/inacho/php-credit-card-validator
GitHub – rap2hpoutre/laravel-credit-card-validator: Laravel Credit Card Validator
https://github.com/rap2hpoutre/laravel-credit-card-validator
GitHub – Intervention/validation: Extension for the Laravel validation class
https://github.com/Intervention/validation