Post

プログラミング

2016-10-03 16:18:00

React Tag Autocompleteを使ってサジェスト付きタグ機能を実装する

タグ機能をフルスクラッチで開発しようと思っていたのですが、便利なReact Componentが沢山見つかったのでそちらを利用してみました。 環境 React Babel Browserify React Tag Autocomplete npm 導入npmでReact Tag Autocompleteを導入します。 npm install --save react-tag-autocomplete インクルードの仕方は色々あるかと思いますが、今回の環境ではrequireを使います。 var ReactTags = require('react-tag-autocomplete&#3...

プログラミング

react

2016-12-01 16:17:16

PHPで学ぶデザインパターン - オブジェクト指向の基礎

概要今は絶版になっているPHPによるデザインパターン入門を教科書にして、PHPでデザインパターンを学びます。(※Amazonで中古がありますが、定価の倍以上の値段が付いているようです。) 本連載で扱うコードはgithubにまとめていきます。 本来であれば、OOPの先駆けである言語でデザインパターンを学びたいところでしたが、PHP以外の言語の素養がなかったことと、PHPでデザインパターンを解説している本に出会ったことから、PHPでデザインパターンを学んでみることにしました。 参考   PHPによるデザインパターン入門    Do You PHP はてな   Github shimooka/Php...

プログラミング

デザインパターン php oop

2016-12-02 16:14:48

PHPで学ぶデザインパターン - Template Method ~処理の穴埋め~

Template Method パターンとは?似たような処理を枠組み(型)としてスーパークラスで定義し、より具体的な処理内容をサブクラスで実装するというパターンです。単なる継承ではなく、具体的な処理内容を抽象メソッドとして定義することで、スーパークラスのメソッドの実装を保証し、クラスの振る舞いをサブクラスによって定義させる継承を利用したパターンです。 構造AbstractClass処理の枠組みを定義するクラスで、枠組みを定義するメソッド(template method)とそれを利用するメソッドを含みます。 ConcreteMethodAbstractClassを継承するサブクラスで、Abstr...

プログラミング

デザインパターン php templatemethod

2016-12-04 16:13:57

PHPで学ぶデザインパターン - Singleton ~いくつ作るかを制限~

Singleton パターンとは?インスタンス生成のコストを制御するために、インスタンスが1つしかないことを保証するパターンです。 構造SingletonClasspriavateのコンストラクタとインスタンスを1つだけ返すstaticメソッドと自分自身のインスタンスを保持するためのstatic変数を用意するだけです。 メリットインスタンスへのアクセスを制御できるSingletonパターンが保持する自分自身へのアクセスをprivateに制限しているためクライアント側のコードからのアクセスを制御することができます。 インスタンス数を変更することができる生成されるインスタンスの数を2つ以上に変更す...

プログラミング

デザインパターン php singleton

2016-12-08 16:13:11

PHPで学ぶデザインパターン - Adapter ~APIを変更する~

Adapter パターンとは?API(互換性のないインターフェース)同士を適合させるためのパターンです。既存のコードの変更をせずに、再利用することで新しい機能を提供するというものです。再利用するコードには変更を加えないというのが特徴です。主にコードを再利用するためという後天的理由から成り立っているパターンです。(設計段階でラッパーを用意するパターンはBridgeパターンです。) 構造##TargetClassAPI(インターフェース)の定義をします。 AdapteeClassTargetClassに適合させる既存のAPIを提供します。 AdapterClassAdapteeClassのAPIを...

プログラミング

php adapter デザインパターン

2016-10-03 16:04:12

Laravelの多対多のリレーションでテーブル名を規則から外す時

多対多のリレーションを設計するときに、ドキュメント通りやっていたと思ったらちょっとした勘違いをした話です。 ここに3つのテーブルがあるじゃろ?今回のテーブル events event_tags event_tag_event←pivotテーブル 通常のテーブルは events tags tag_event って感じでデフォルトの規則通りリレーションを貼ればいいのですが、ちょっと癖のある名前にすると少し気をつけるところがあるようです。 ドキュメントを見てみるLaravel 5.1 Eloquent:リレーション ほうほう第2引数をもたせてあげればいいんだなー public functio...

プログラミング

laravel

2017-03-20 16:03:43

Laravelのフォームリクエストでバリデーションされる値をカスタマイズする

概要Laravelのフォームリクエストで、バリデーションされる値をカスタマイズする方法です。APIのエンドポイントが/post/:id/deleteの時に、ルートパラメーターにフォームリクエストのバリデーションをかけたい・・なんて時に有効かもしれません。 validationDataメソッドをいじるLaravel APIにあるvalidationDataをいじります。 ルートパラメーターのidにバリデーションをかける例です。 <?php namespace App\Http\Requests\Api\v1\Category; use Illuminate\Foundation\Htt...

プログラミング

laravel

2016-12-15 16:01:50

Laravelのredirect('hoge')とredirect()->to('hoge')の違い

些細な事ですが、気になったので調べてみました。 public function getIndex() { return redirect()->to('hoge'); } 今まで何となくこっちを使っていましたが、 public function getIndex() { return redirect('hoge'); } こっちでも問題なく動作するのでredirectヘルパーの実装について調べてみました。 redirectヘルパーの実装if (!function_exists('redirect')) { /** * Get an instance of...

プログラミング

laravel

2016-10-03 15:57:50

LaravelにbowerでReactを導入してみる

先日、Laravel5.3ではフロントエンドフレームワークとしてVue.jsをデフォルトとして採用するのが決定したようです。 普段、フロントエンドはjQueryで開発しているのですが、最近の流行りに乗じてReactを使ってみることにしました。LaravelならVue.jsにしとくのが無難かなと考えたのですが、Reactが今一番伸びがある(らしい)のでReactにしました。AngularJSとで迷ったのですが、あくまでjQueryの代わりになるかつViewだけ担当するものを考えていたのでReactを選択しました。 それぞれのFWの技術的な利用価値について説明できるほどフロントエンドマンではないの...

プログラミング

laravel react

2017-08-13 15:56:24

Laravelでエラーメッセージを共通のテンプレートで対応する方法

概要Laravelのエラーページを共通のテンプレートで対応する方法について説明します。 エラーハンドリングをカスタマイズapp/Exceptions/Handler.phpでrenderHttpExceptionメソッドをオーバーライドします。 Laravel API - Handler.php <?php namespace App\Exceptions; use Exception; use Illuminate\Auth\AuthenticationException; use Illuminate\Foundation\Exceptions\Handler as Exce...

プログラミング

laravel

2016-10-03 21:17:47

LaravelでRestAPIをつくる

LaravelでReactをフロントエンドのフレームワークとして採用しているのですが、APIを設計する必要がでてきたのでやってみました。 やること ResourceControllerをつくってデータを出力するだけのAPIをつくる API公開を見越した認証用ミドルウェアを実装する やらないこと Restの説明 APIデータの更新や削除 Ajaxでのデータの取得と出力 環境 Laravel5.2 Resource Controllerをつくる職人さんの朝は早い・・・php artisan make:controller HogeController --resource 職人が仕事するとこ...

プログラミング

api laravel react rest

2016-10-03 21:16:56

LaravelでEventを使う

ユーザー登録時や退会時など特定のイベントの時に発火させたいメソッドを管理したい時はイベントリスナーを使うと便利です。 今回は基本的なイベントとリスナーの定義の仕方についてはすっ飛ばし、一つのリスナークラスで複数のイベントを設定できるイベント購読について扱います。 環境 laravel5.2 ディレクトリ app\Events・・・イベント名=クラス名としたクラスを置く(厳密な命名規則はないです) app\Listeners・・・イベントごとの処理(リスナー)とsubscribeメソッドの実装(後述)したクラスを置く app\Providers・・・イベント購読で使用するリスナーを登録するクラ...

プログラミング

laravel

2017-04-25 21:15:56

LaravelでCORS対応

概要LaravelでCORS(Cross-Origin Resource Sharing)に対応する方法をまとめました。クライアントサイドはReact, axiosを使用します。前提知識としては、CORSのリクエスト形態、シンプルなリクエスト方法と、preflightを使用するリクエスト方法の違いを抑えておけば良いかと思います。RESTfulAPIの場合は基本的にはpreflightを使用するリクエスト形式かと思います。この記事では、preflightを使用するリクエストに対応する例を取り上げます。 環境CORSなので当たり前ですが、apiとwebでドメインを用意しています。 api.hoge...

プログラミング

laravel cors

2016-10-03 21:15:10

Laravelでajaxの際にCsrfTokenに引っかかった話

Laravel+React+SuperagentでAjaxを実装していたら、500エラーがでて、「いやいやまさかTokenじゃないっしょ〜 そんなの知ってるもん〜」と捻くれていたら、CsrfTokenが原因でした。 解決方法ヘッダにTokenを含める方法もありますが、ハードコーディング感があるので、VerifyCsrfToken.phpで該当URLを除外する方法がスマートだと思うのでそちらを記載します。 <?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfTo...

プログラミング

ajax laravel react superagent

2017-07-15 15:56:31

Laravel5.4でsqliteを使ってテストをかく準備

概要Laravel5.4でsqliteの使ってテストをかく準備をします。 前提 Laravelの基本 マイグレーションファイルの用意 phpunit.xmlを編集以下3行を追加します。 sqliteのインメモリ機能を使います。 <php> <env name="APP_ENV" value="testing"/> <env name="CACHE_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/>...

プログラミング

laravel sqlite test

2016-12-18 21:13:47

Laravel5.3で自作artisanコマンド.md

今携わっているプロジェクトでRepositoryパターンを導入しているのですが、Repository関連のファイルを自動で生成するコマンドがあったら便利だなと思い、作ってみました。 コマンドを生成php artisan make:command Repository /CommandsにRespository.phpというコマンド用のファイルが生成されます。 コマンドファイルを編集Repository.phpを編集します。handleメソッド部分はCreating file using Artisan Command in Laravel 5.1のコードをお借りして、少しカスタマイズしました。...

プログラミング

laravel repository artisan

2016-10-03 21:08:38

Laravel5.2にNotificationでNotificationを使う

Laravel5.3がリリースされましたが、あえてLaravel5.2でNotificationを使う話です。 環境 Laravel5.2(または5.1) NotificationをインストールNotificationとはナンゾヤ? Laravel.com - NotificaionsLaravel Notification Channel Laravel5.3以前では通知の管理などはEventとListenerを活用することで何とかゴニョゴニョやっていたかと思います。 それがNotificationによって、より便利に通知管理を行えるようになりました。※名前の通り、通知に特化したものなので...

プログラミング

laravel

2016-10-03 21:07:08

Laravel+React+Superagentでフォームを実装

表題の通りです。Laravel+React+SuperagentでAjaxなフォームを実装します。 AjaxライブラリとしてSuperagentを採用しているのは、jQueryから脱却したいのと、jQueryのAjaxよりも分かりやすかったからです。プロミスとかいう難しい概念があるらしいですが、それは横に置いておいてもとりあえずは使えそうです。 Web標準の観点からするとFetchAPIがイケてるらしいのですが、各ブラウザベンダーの実装にばらつきがあるようなので避けました。 フロントエンドってつくづくカオスだなーとボヤキつつも話を進めていきたいと想います。 やること LaravelでAPIを用...

プログラミング

laravel react ajax superagent

2016-10-03 21:06:21

Laravel+React+ES6+Browserify

ちょっと前の記事で、bowerでReactの環境をセットアップするという話をしたのですが、npmでReactのパッケージ管理をしたほうがスマートだし、ES6かけるようになっといた方がこの先お得よねということで環境を再構築しました。 ES5からES6で書き方が色々変わるのでその辺の改修がちょっと面倒でしたが、さほど難しいことはないので気負いしなくとも良さそうです。 環境 Laravel5.2・・・5.1とか5.2ユーザーはelixirのバージョンを最新(5.3のそれと同じ)に上げとくといいかもです。 Browerify(Elixirについてるやつ) React ES6 Reactをnpmで用意...

プログラミング

react javascript npm webpack es6 browerify es5

2016-12-17 21:03:53

Laravel リポジトリパターンの実装

DB操作に関連するスマートな実装パターンであるリポジトリパターンについてかいてみようかと思います。 リポジトリパターンとはデータの操作に関連するロジックをビジネスロジックから切り離し、抽象化したレイヤに任せることで保守や拡張性を高めるパターンです。(必ずしもDB操作のロジックのみを留めるパターンというわけではないそうです。) Laravelにリポジトリパターンを取り入れることで、 テストがしやすくなる DBエンジンの変更に対応しやすくなる データ操作のロジックが1箇所にまとまり、管理しやすくなる といったメリットを得ることができます。 リポジトリパターンの実装Modelと同じ単位でRepo...

プログラミング

laravel repository