猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

PHP Laravel 標準の AuthenticatesUsers によるログインの処理を見てみる

環境 はじめに AuthenticatesUsers::login の中でやっていること validateLogin hasTooManyLoginAttempts まわり ThrottlesLogins::hasTooManyLoginAttempts attemptLogin それ以降の処理 環境 PHP 7.3 Laravel 5.8 はじめに Laravel では標準で認証の機能が…

PHP, Laravelで開発する時に役に立ったページ

はじめに 個人的に役に立ったページです 執筆時のLaravelの最新版は 5.8 です 基本は公式ドキュメントが大事 随時更新していきます Homestead Laravel Homestead 5.8 Laravel HomesteadでPHP(Laravel)アプリケーションが動作しなくなった時の対処法 Model, M…

PHPでstringをintにキャストする場合のバリデーションについて

PHP

環境 はじめに is_numeric ctype_digit 結論: filter_var 環境 利用しているバージョンは PHP 7.2 ですが、結構幅広いバージョンに通じる話だと思う。 はじめに PHPのキャストがガバガバなのはみなさんご存知だろう。 $ php -r "var_dump((int)'ホゲーーー')…

【PHP】LaravelでServiceProviderでInterfaceに実装を注入したりstringを注入する方法【DI】

Interfaceを利用する意義 Laravelでどうやって注入するの? サービスプロバイダとは register メソッドでDIの設定を書く Interfaceへの実装注入以外の用途でも使える まとめ Interfaceを利用する意義 LaravelはDIを勝手にいい感じにしてくれます。例えばこう…

Vagrantを使ってPHP Laravel開発(PHP 7.3, Laravel 5.8 macOS)

はじめに PHPのWebフレームワークといえばLaravelである。今PHPでWebアプリケーションを開発するならLaravelを使っておけば間違い無い。 LaravelにはHomesteadという開発環境が用意されていて、これを使えばすぐにWebアプリを作成できる。 環境 今回はMacで…

【PHP】Mockeryでクラスとインタフェースを継承したクラスをモックしたり、複数のインタフェースを実装したクラスをモックする

はじめに PHPのGuzzleHttp *1 を利用し、以下のようなコードを書いた。 guzzleClient は コンストラクタDIなどを利用して // $this->guzzleClinet = new \GuzzleHttp\Client(); を差し込むようにする $response = $this->guzzleClient->post($url); } catch …

PHP 7.4で追加される ??= 演算子はそんなに使えないんじゃないだろうか

概要 ??= 演算子とは この演算子が使えない理由 関係する演算子の歴史 三項演算子 a ? b : c 二項演算子 ?: 演算子 ?? まとめ 参考 概要 PHP 7.4 から ??= 演算子が追加されることが確定しました。 github.com ??= 演算子とは $var ??= <value> は、 $var が null </value>…

PHPでのWebサービス新規開発メモ

これはなに? PHPで新規開発する際にどういう構成だったりフレームワークにしていくかなというメモです。 PHPの特徴 ゆるふわで書けるので開発スピードが早い。 学習コストが低く直感的なので誰でもすぐに書ける。 利用者が多くライブラリが充実している。 P…

PHP7.4からクラスのプロパティに型がかけるようになる

PHP

はじめに 機能の概要 v1 との違い 対応している型 callableについて strict_types 継承 将来の話: readonly 値の初期化 参照渡し さいごに 参考 はじめに PHP 7.4の新機能としてクラスのプロパティに型がかけるようになる機能が提案されていました。これはTy…

PHPのSlim Framework 3.11 がリリースされ、 StatusCodeクラスが追加されていた

はじめに 2018年9月にSlimの3.11がリリースされました。私がslimフレームワークを採用して開発を始めた時のバージョンは3.9.2でした。3.9.2のリリースが2017年の11月、3.10.0が2018年の4月。3.9.2から2回のリリースがありました。 3.10.0の変更 3.10.0の変更…

Mockeryでモックしようとしたときに Mockery_XXX::__call($method, $args) should be compatible with ... と言われる 2

前回のあらすじ 以下の記事の続きです。 www.utakata.work FluentPDO *1 というライブラリのSelectQueryメソッドをMockeryでMockしようとすると、Declaration of Mockery_3_SelectQuery::__call($method, $args) should be compatible with CommonQuery::__c…

Mockeryでモックしようとしたときに Mockery_XXX::__call($method, $args) should be compatible with ... と言われる

はじめに MockeryとFluentPDOの実装を追ってみる。 どうするか はじめに PHPのモックフレームワーク「Mockery」を利用してクラスをモックしようとした際に以下のエラーが出た。 Declaration of Mockery_3_SelectQuery::__call($method, $args) should be com…

PHPで新しくAPIサーバーを建てるまで - 開発のススメ方や利用している技術スタックなど

はじめに 新しくAPIサーバーを建てるまでの話 新サービスを建てるにあたり考えなければいけないこと 開発を進めるにあたり 言語・フレームワーク・ミドルウェア選定 フレームワークどうするか GraphQLを採用するか、JSONのREST APIにするか サーバー構成をど…

PHPの面白い挙動や細かい仕様?について その1

php

はじめに PHPのバージョン empty(false) は true is_numericはfloatでもtrue $datetime->format の t まとめ はじめに PHP アドベントカレンダー が結構空いているので突貫で記事を書いています。 以前、以下のような記事を書きました。 www.utakata.work ま…

PHPでGraphQLサーバーを建ててみる

はじめに この記事は GraphQL Advent Calendar 2018 - Qiita の4日目の記事です。 昨日はgipcompanyさんのLet's Paginate! - GraphQLでページネーションをやってみよう!でした。 PHPでGraphQL GraphQLが話題になり始めたぐらいの時に、「GraphQL便利そうだ…

PHP7の例外(Exception)の関係、正しく例外を使いましょう。

Thorowable Error Exception RuntimeException LogicException まとめ PHP7の例外のうちよく使う例外と構造は以下の通りです。 Thorwable Error Exception RuntimeException LogicException もっと詳細な図は以下の記事を見るとわかりやすいです。 qiita.com…

PHP Slim Framework を使いこなすための仕様詳細 ※順次追記していきます

はじめに バージョン 参考 Request 継承関係 Psr\Http\Message\MessageInterface と Psr\Http\Message\ServerRequestInterface Requestクラスで定義されているHTTP Method Request::getParam($key, $default = null) Request::getMethod() はじめに Slim Fra…

PHPのモックフレームワークMockeryでprotectedメソッドをモックする

PHPのモックフレームワークでprotectedメソッドをモックしたくなる場合があります。例えば、 database = $database; } public function save($title, $description) { $createdAt = $this->now(); $database->store($title, $…

PHPのcallableとその呼び方とクラスプロパティについて

先日、こんな事件がありました。 どういうことなのか もっとわかりやすく 何が間違いなの? 具体的に動くコードで見てみる わかりましたか? 先日、こんな事件がありました。 func; $func(); // これ以降 $func は使われていない } } このようなコードがあり…

PHP7化する際にcountメソッドとException周りでハマる件

PHP

countメソッド Exception周り まとめ countメソッド 要するに以下のQiitaの記事の内容である qiita.com PHPのcount関数を利用したときに以下のWarningげ出ることがある Warning: count(): Parameter must be an array or an object that implements Countable…

【PHP】Mockeryでパーシャルモックを作る際に、コンストラクタが呼ばれるようにしたい

Mockeryでパーシャルモックを作ることがある repository = new Repository(); } public function モックしたいメソッド() { } public function モックしたくないメソッド() { } } // テスト $mock = \Mockery::mock(モックしたいクラス::class)->makePartial…

PHP Slim FrameworkのMiddleware

もくじ もくじ Middlewareとは Middlewareの実装方法 Middlewareの利用方法 どういうときに使うか Middlewareとは beforeとafterを指定できる Middlewareの実装方法 functionで実装するかClassで実装するかがあるけどクラスで実装したほうがいいだろう

MacのApacheとPHPのバージョンが勝手に上がったので設定をし直す

もくじ もくじ 概要 Set the 'ServerName' directive globally to suppress this message configの場所を特定する ServerName を書く PHPの問題 brewでインストールされているPHPのディレクトリ Apache用のPHPモジュールのディレクトリ ApacheのconfigにPHP…

【PHP】 PDO の construct で SQLSTATE[HY000] [2002] No such file or directory

No such file or directory は UNIX ソケットのファイルが見つからないエラー 修正方法 UNIX ソケットファイルの場所を確認 php.ini の設定を確認 php.ini の修正 参考ページ No such file or directory は UNIX ソケットのファイルが見つからないエラー PDO…

PHP5.6からPHP7系にするときに修正した点まとめ

背景 php7ccを利用したチェック php7ccのインストール php7cc の使い方 PHP7化にあたり修正が必要だった箇所 古い形式のコンストラクタ 参照渡しnewの削除 preg_replace 関数の e 修飾子が使えなくなった 参考 String, Int という名前のクラスは定義できなく…

PHP で GuzzleHttp と DOMDocument/DOMXPath を使ってページのスクレイピングをする

PHP

はじめに PHP で Web ページのスクレイピングをする 利用するのはGuzzleHttpとDOMDocument DOMDocument DOMXpath GuzzleHttp GuzzleHttpのインストール スクレイピングしてみる GuzzleHttpを使ってHTTPリクエストを送る Guzzleで受け取った結果をDOMDocument…

PHP の composer で remove する時にパッケージの依存関係も含めて remove したい

PHP

状況 composer remove --update-with-dependencies でもだめだった 一番確実なのは composer.lock を作り直すことだが... ただ、バージョンが固定されておらず composer.lock を簡単に消せないことも ではどうすればいいのか composer.lock を読む どうやっ…

PHPのSplPriorityQueueで複雑な実装をしようとするとたまにおかしい時がある?

PHP

SplPriorityQueue を継承したらちょっと複雑なPriorityQueueが実装したりできるのですが、なんかたまにうまく動かないことがあります。 正常に動く例: 長方形を面積が大きい順に並べる SplPriorityQueue を継承して、 insertRectangle というメソッドで面積…

PHPのPriorityQueueの実装についてとSplPriorityQueueの使い方

PHP

JavaやC++だとPriorityQueueが標準ライブラリで用意されているイメージがありますが、PHPはあまりそういったイメージがありません。しかし、PHPでもちゃんとPriorityQueueが標準で用意されています。 SplPriorityQueue の使い方 PHPのPriorityQueueの実装がS…

MacでHomebrewを使っていて、コマンドラインから叩くphpのバージョンがなんかおかしくなった場合の対処

概要 ある日 composer install するとこんな警告が出た phpunit/phpunit 5.7.21 requires php ^5.6 || ^7.0 -> your PHP version (5.5.20) does not satisfy that requirement. phpunit 5.7.21 を利用するには php5.6 以上または php7.0 以上が必要だが、あ…