2017年8月30日水曜日

Laravel5.4で、blade内でURLセグメントを取得

Laravel5.4で、blade内でURLセグメントを取得です。「Request::segment」で、URLのセグメントを順に取得できます。

http://example.com/aaa/bbb/ccc

aaa を表示させるには、{{ Request::segment(1) }}
bbb を表示させるには、{{ Request::segment(2) }}
ccc を表示させるには、{{ Request::segment(3) }}

参考サイト
How to access URL segment(s) in blade in Laravel 5?(Stack Overflow)

2017年8月29日火曜日

Laravel5.4で、複数条件のユニークバリデーション

Laravel5.4で、複数条件のユニークバリデーションです。 商品(items)テーブルのサイズ(size)と色(color)、商品コード(code)をユニークにする入力チェックの例です。使いこなすまでに時間がかかりましたが、便利で強力なこと、この上なし。実装のコツは、デバックバーのSQLをチェックしながら、ああでもない、こうでもないと、試行錯誤を延々と繰り返すことです(笑)。

$validator[] = Validator::make($input, [
  'code' => 'required|alpha_num|unique:items,code,NULL,items,size,'.$input['size'].',color,'.$input['color'],
]);

参考サイト
Laravel5のバリデーションで複合カラムのユニークを実現(中小企業に勤めるITエンジニアの徒然日記さん)
composite-unique-key-validation - laravel(Stack Overflow)
Laravel5.3で更新の「unique」バリデーション
Laravel5.3でデバック用ツールバー「Laravel Debugbar」

2017年8月28日月曜日

MySQLで「Specified key was too long; max key length is 767 bytes」のエラー

MySQLで「Specified key was too long; max key length is 767 bytes」のエラーです。文字コードの「utf8mb4」がいけないのかと思い、「utf8」に変更してデータベースを作り直しても改善せず。次に「varchar(255)」のフィールドがキーになっていることが原因だろうと思い、「varchar(20)」「varchar(50)」「varchar(100)」など、可能な限り切り詰めたら、うまくデータベースを作成、復元できました。

Laravel5 でマイグレーションする場合は、サイズを指定すると良いと思います。
$table->string('name', 50);
$table->string('email', 100)->unique();

参考サイト
MySQLのUNIQUEなINDEXには長さ767byteまでしか使えない件と対策((tanamonの日記さん)
Mysqlでユニーク制約をつけたvarcharは767byteまでしか入らない話(Qiita)
Laravel 5.4: Specified key was too long error(Laravel News)

2017年8月27日日曜日

フロントエンドアプリ用JavaScriptライブラリ「Hyperapp」

フロントエンドアプリ用JavaScriptライブラリ「Hyperapp」 なんとか追いついていかないとというわけで、メモです。

HyperAppはインタラクティブなWebアプリケーションを構築するツールで、一方向のデータフローやJSX、バーチャルDOMなど、Reactで有名になった多くの概念を踏襲しています。Elmアーキテクチャーに基づいており、アプリケーション設計はElmやReact、Reduxと似ています。


参考サイト
超軽量で学習コストが低い最新JSライブラリー「HyperApp」とは何か(WPJ)
hyperapp – 1kbのビューライブラリ(Qiita)
hyperapp/hyperapp(GitHub)

2017年8月26日土曜日

スマートフォンでも10年使えるOSを目指す「postmarketOS」

スマートフォンでも10年使えるOSを目指す「postmarketOS」 なかなか面白い切り口だなと思いました。実際、インストールして利用するとなると、敷居が高そうな気がしないでもないですが、ニーズはあると思いますので、要チェックでしょう。



参考サイト
スマートフォン端末などを10年使えるようにすることを目指すOS開発プロジェクト「postmarketOS」(エキサイトニュース)

2017年8月25日金曜日

Laravel5.4で、コントローラーの共通関数

Laravel5.4で、コントローラーの共通関数です。CommonControllerを作成して、コントローラー内から、スタティックに呼び出せば良いらしい。スタティックに呼び出すのが気が進まないという場合は、CommonController自体を継承すれば良いのかな? 善し悪しは別として、とにかく、便利に使えます。

/app/Http/Controller/CommonController.php(共通関数)
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class CommonController extends Controller
{
  public static function total($x, $y)
  {
    return $x + $y ;
  }
}


/app/Http/Controller/CartController.php(コントローラーで共通関数を呼び出す)
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\CommonController as Common;

class CartController extends Controller
{
  public function index(Request $request)
  {
    $itemA = 100 ;
    $itemB = 200 ;
    $totalPrice = Common::total($itemA, $itemB);
  }
}

参考サイト
Laravel 5 - Where to define functions and call them in views & controllers(Stack Overflow)
How to add custom class in Laravel 5(Arjunさん)

2017年8月24日木曜日

Laravel5.4で、Artisanコマンド一行で、モデル、マイグレーション、コントローラーを一気に作成

Laravel5.4で、Artisanコマンド一行で、モデル、マイグレーション、コントローラーを一気に作成です。php artisan make:modelで「-crm」オプションを付ければ良いらしい。カッコイイ! 高速開発に寄与してくれること間違い無し(笑)。

$ php artisan make:model Blog -crm
Model created successfully.
Created Migration: 2017_08_25_000000_create_blogs_table
Controller created successfully.

参考サイト
Laravel Create Controller, Model and migration in one Artisan Command(Arjunさん)

2017年8月23日水曜日

PHPで、文章の最初の一行を抜き出す「strtok」

PHPで、文章の最初の一行を抜き出すコードです。strtokなんて文字列関数があるんですね。力技で挑めば、いろいろな方法があると思いますが、これ以上シンプルなコードは見つからないでしょう。気品さえ漂います(笑)。

$first_line = strtok($test, "\n");

参考サイト
Obtain first line of a string in PHP(Stack Overflow)

2017年8月22日火曜日

PHPで、16進数で指定された表示色を暗くしたり、明るくしたりする

PHPで、16進数で指定された表示色を暗くしたり、明るくしたりする関数です。見事に動いてくれるので、感動です。

function color_luminance( $hex, $percent ) {

  // 16進数色のチェック
  $hex = preg_replace( '/[^0-9a-f]/i', '', $hex );
  $new_hex = '#';
  if ( strlen( $hex ) < 6 ) {
    $hex = $hex[0] + $hex[0] + $hex[1] + $hex[1] + $hex[2] + $hex[2];
  }

  // 小数に変換して明るさを変更する
  for ($i = 0; $i < 3; $i++) {
    $dec = hexdec( substr( $hex, $i*2, 2 ) );
    $dec = min( max( 0, $dec + $dec * $percent ), 255 ); 
    $new_hex .= str_pad( dechex( $dec ) , 2, 0, STR_PAD_LEFT );
  }    

  return $new_hex;
}
// 元の色
$hex = "#fff68f" ;

// 10%明るく
$light_color = color_luminance( $hex, 0.1 ) ;

// 10%暗く
$dark_color = color_luminance( $hex, -0.1 ) ;

参考サイト
Lighten or darken a given colour(GitHub)
hexdec(PHP)
dechex(PHP)

2017年8月21日月曜日

Laravel5.4で、ユーザーの登録(/register)を無効にする

Laravel5.4で、ユーザーの登録(/register)を無効にする設定です。RegisterController.phpで、showRegistrationForm()をオーバーライドすれば良いらしい。

/app/Http/Controller/Auth/RegisterController.php(その1)
  public function showRegistrationForm()
  {
    abort(404);
  }

ミドルウェアを「auth」に変更すると、ログイン画面にリダイレクトされます。
これでも良いと思います。

/app/Http/Controller/Auth/RegisterController.php(その2)
  public function __construct()
  {
    $this->middleware('auth');
  }

参考サイト
How to disable registration new user in Laravel 5(Stack Overflow)
isable registration in built-in registration Laravel 5.3(Laracasts)

2017年8月20日日曜日

QRコードで決済「Origami Pay」

QRコードで決済「Origami Pay」 スマートフォンに専用アプリをインストールして、QRコードを読み取るだけで、決済できるというもの。面白いアイディアですね。今後注目のサービスだと思います。



参考サイト
QRコード買い物サービス拡大 スマホで読み取るだけで支払い(NHKニュース)
ドコモが「QR決済」導入 買い物代、毎月の携帯料金に合算 今年度、ローソンなどで(ITmedia エグゼクティブ)

2017年8月19日土曜日

オープンソースの情報共有化ツール「Pleasanter」

オープンソースの情報共有化ツール「Pleasanter」 C#で書かれています。ちょっと試させてもらいましたが、かなり高機能です。かなりの業務をウェブ上で共有できるようになるのではないでしょうか。素晴らしい。





参考サイト
プリザンター(GitHub)

2017年8月18日金曜日

PHPのSplFileObjectでCSVファイルを読み込み

PHPのSplFileObjectでCSVファイルを読み込みです。ファイルオープンして、fgetcsvでもいいですが、こちらの方がスマートかな? とにかく、気に入りました。

$filepath = 'sample.csv' ;
$file = new \SplFileObject($filepath) ; 
$file->setFlags(\SplFileObject::READ_CSV) ; 
foreach ($file as $line) {
  if (!empty($line[0])) {
    $data = [
      'id' => $line[0],
      'name' => $line[1],
      'price' => $line[2],
      'created_at' => $line[3],
    ] ;
  }
}

参考サイト
【PHP】CSVファイルの読み込み(Qiita)
SplFileObjectでオブジェクト指向らしいファイル操作をしてみる(Qiita)

2017年8月17日木曜日

Laravel5.4で、コントロラー内のミドルウェア

Laravel5.4で、コントロラー(Controller)内のミドルウェア(Middleware)です。 middleware('auth') は、よく使うとして、特定のメソッドにのみミドルウェアを適用することもできるんですね。ようやく、ミドルウェア(Middleware)の使い方がわかったかもしれません(笑)。

class UserController extends Controller
{
  public function __construct()
  {
    $this->middleware('auth');

    $this->middleware('aaa', ['only' => [
      'index',
      'show',
    ]]);

    $this->middleware('bbb', ['except' => [
      'edit',
      'update',
      'destroy',
    ]]);
  }
}

参考サイト
Controllers(Laravel)
Laravel 5.* multiple middleware whole controller(Stack Overflow)

2017年8月16日水曜日

Laravel5.4で、フォームをタイムアウトさせない「laravel-caffeine」

Laravel5.4で、フォームをタイムアウトさせない「laravel-caffeine」 タイムアウトを防ぐため、定期的にリクエスト(カフェインドリップ?)を送っているとのこと。 「_token」フィールドを持つページでのみで実装されていて、他のページは通常どおりタイムアウトするそうです。試していませんが、こだわりたい場合は便利かなと思いますのでメモ。



参考サイト
Laravel5.4で、CSRFのエラー処理「TokenMismatchException」

2017年8月15日火曜日

Laravel5.4で、CSRFのエラー処理「TokenMismatchException」

Laravel5.4で、CSRFのエラー処理「TokenMismatchException」です。ディフォルトだと、Symfonyのエラー画面が表示される(?)ようなので、例外処理でエラーを拾って処理すると、エレガントな振る舞いになるように思います。

/app/Exceptions/Handler.php
use Illuminate\Session\TokenMismatchException;

  /**
   * Render an exception into an HTTP response.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \Exception  $exception
   * @return \Illuminate\Http\Response
   */
  public function render($request, Exception $exception)
  {
    if ($exception instanceof TokenMismatchException){
      return redirect('/csrf_error') ;
    }

    return parent::render($request, $exception);
  }

参考サイト
Laravel catch TokenMismatchException(Stack Overflow)

2017年8月14日月曜日

2017年8月13日日曜日

即座に数値データをインタラクティブに可視化してくれる「Tableau」

即座に数値データをインタラクティブに可視化してくれる「Tableau」 データベースに直結で、数値データを高度に分析してくれます。日々思うことですが、プログラマーは全くもって必要なくなりますね(笑)。





2017年8月12日土曜日

JavaScriptの日付ユーティリティライブラリ「date-fns」

JavaScriptの日付ユーティリティライブラリ「date-fns」 便利そうだったのでメモ。CDNも用意されています。

<script src="http://cdn.date-fns.org/v1.9.0/date_fns.min.js"></script>
<script>
  dateFns.isToday(new Date())
  //=> true
</script>



参考サイト
面倒なJavaScriptの日付の処理は「date-fns」でラクに片付けよう(ASCII.jp)
date-fns(GitHub)

2017年8月11日金曜日

一度にPOSTできる変数の数の上限「max_input_vars」

一度にPOSTできる変数の数の上限「max_input_vars」 こんな設定があったんですね。なんでデータを取得できないのか、しばらく悩んでしまいました。

php.ini
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000
max_input_vars = 3000

参考サイト
PHP5.3以降で一度にPOSTできる上限数(max_input_vars)を変更する(PHP工房さん)
PHP 5.3 max_input_vars and big forms(The eternal fight between admins and computersさん)

2017年8月10日木曜日

Laravel5.4で、セッションのタイムアウト時間設定

Laravel5.4で、セッションのタイムアウト時間設定です。設定ファイルのsession.phpで、変更が可能。lifetimeで、セッションの時間(分)を変更できます。expire_on_closeをtrueにすると、ブラウザを閉じると、セッションが切れます。ディフォルトでは、ブラウザを閉じてもセッションは保たれる設定らしい。

/app/config/session.php
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/

// 'lifetime' => 120,
'lifetime' => 60,

// 'expire_on_close' => false,
'expire_on_close' => true,

参考サイト
Laravel Inactivity time setting(Stack Overflow)