PHP関連のことを調べてみた2020年10月12日

PHP関連のことを調べてみた2020年10月12日
目次

[DDD Tips] アプリケーション層とドメイン層の区分けについて

# はじめに
記事を書く時間が取れないため、単発のTipsを書くことにしました。
ドメイン駆動設計の現場で気づいたことや、自分が理解に苦しんだポイントなどを簡易的に取り上げていきたいと思います。

この記事では、ドメイン駆動設計を始めようとしている方を対象に書いています。
「DDDの書籍は沢山読んだ!理解した気がする!」という段階の方に向いていると思います。
概念を理解したつもりでも、いざコードを書こうとすると手が止まってしまう。

今回は、アプリケーション層(ユースケース)とドメイン層の実装で判断に迷いそうな箇所を取り上げていきたいと思います。

※ 当記事はLaravelを例に書いております。

# 例題1
* 記事の投稿機能を持つアプリケーション
* 投稿された記事をユーザーに対して表示するユースケース

## BAD Practice

“`ShowPostUseCase.php

元記事を表示

Moodle 3.9 マニュアル – コースをアップロードする

[原文](https://docs.moodle.org/39/en/Upload_courses)

注:このページは、テキスト(.csv)ファイルを使用したコースの作成に関するものです。コースのバックアップを.mbzまたは.tgz形式でアップロードする場合は、コースの復元を参照してください。

内容

[1 コースをアップロードする](#1-コースをアップロードする)
[1.1 短いファイルの例](#11-短いファイルの例)
[2 テキストファイルの作成](#2-テキストファイルの作成)
[2.1 コース情報フィールド](#21-コース情報フィールド)
[2.1.1 登録フィールド](#211-登録フィールド)
[2.1.2 役割の名前変更](#212-役割の名前変更)
[2.2 コースアクションフィールド](#22-コースアクションフィールド)
[2.3 必須フィールド](#23-必須フィールド)
[2.4 インポートオプション](#24-インポートオプション)
[2.5 コースプロセス](#25-コースプロセス)
[2.6 デフォルトのコース値](#26-デフォルトのコース値

元記事を表示

curl で unable to load client key: -8178 エラーが出た

## 要件
ルート証明書を使用して、とあるホストにアクセスする用事があった。
ゴールは、PHP の cURL 関数でアクセスできること。

### 環境
+ CentOS 7
+ php7.3
– cURL 関数を使用

## 事象
### php の cURL 関数でエラーが発生
証明書のパスを指定して cURL 関数を実行してみたところ、
以下のようなエラーが出てしまった。

“`
# オプション定義(抜粋)
$ch = curl_init( “https://xxxx” );
curl_setopt( $ch, CURLOPT_SSLCERT, “./aaa.pem” );
curl_exec( $ch );

# 実行結果
cURL の戻り値:58
curl_error のメッセージ:
unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
“`

## 調査
### CUI の curl でアクセスしてみる
では、同じ URL に対して CUI の curl で試したらどうなるか確認。

“`
# コマンド
c

元記事を表示

composerでメモリ制限エラーがでた話

#エラー内容

“`
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.
“`

メモリーが足りないよ!ってエラーが帰ってきた

なので下記コマンドでメモリーの許可されている容量を調べると

“`
php -r ‘phpinfo();’ | grep memory_limit
““

“`
memory_limit => 128M => 128M
“`
128Mじゃそりゃ足りないわな,,,,

元記事を表示

Laravel 8 を体系的に学べる公式チュートリアル和訳

## この記事について

* この記事は、Laravel 8 のGetting Startedを和訳したものです。

* 公式のチュートリアルなので、安心して、かつ効率的に学習することができます。

* Laravelのインストールとその設定、各種ツールの説明まで網羅されているので、初学者がLaravel 8 に初めて触れたり、中級者が基礎を振り返るのに最適です。

* 読者に誤解を与えない部分は、読みやすさを重視して適宜意訳しています。

* 英語の記事へのリンクを日本語の記事へのリンクに変更したり、新しくリンクを追加している部分があります。

* DeepL等を使用して推敲は行っていますが、間違っているところやより良い表現があれば、どんどん編集リクエストをお願いいたします。

* 文頭にある:mag:は、原文のリンクになっています。

> **翻訳元**
>
> laravel / docs : [https://github.com/laravel/docs/tree/8.x](https://github.com/laravel/docs/tree/8.x)
>
>

元記事を表示

Carbonで何週目の何曜日の日付を取得する

日付処理を扱う上で、carbonに非常に助けられている今日この頃だが、思ったより簡単に書けない処理があり、暫定で作ったものを備忘録として残す。それもっと簡単に行けるで、という情報があれば是非教えていただければと思う。
#前提
日曜始まり土曜終わりを1週として、日曜から順に0,1,2…と曜日と数字が対応している。

“`php
[‘sun’ => 0, ‘mon’ => 1, ‘tue’ => 2, ‘wed’ => 3, ‘thu’ => 4, ‘fri’ => 5, ‘sat’ => 6,]
“`
1週目、2週目、、、5週目とn週目とnが対応している。

“`php
[‘1週目’ => 1, ‘2週目’ => 2, ‘3週目’ => 3, ‘4週目’ => 4, ‘5週目’ => 5, ‘6週目’ => 6]
“`

#要件
n週目のm曜日を入力値として与えられた時に、日付を返す。

“`php

public function getDate($week_of_month, $weekday)
{
// return ‘2020-10-19’
}
“`

#Ca

元記事を表示

[Codewars] Duplicate Encoder

## 概要

Codewarsの問題 `Duplicate Encoder` の回答の復習とベストプラクティスをまとめる個人メモです。

## 問題

>The goal of this exercise is to convert a string to a new string where each character in the new string is “(” if that character appears only once in the original string, or “)” if that character appears more than once in the original string. Ignore capitalization when determining if a character is a duplicate.

example

“`
“din” => “(((”
“recede” => “()()()”
“Success” => “)())())”
“(( @” => “))((”
“`

元記事を表示

Laravel Task Schedulerで動的にタスクを実行する

Laravelには標準でタスクスケジューラーがあるため指定した時刻に、指定した処理を実行したい場合にはかなり簡単にかける。

“`php:Kernel.php

元記事を表示

Content-Typeとattachmentを指定してファイルダウンロードする方法[PHP]

この記事では、HTTPレスポンスとしてファイルをダウンロードさせたいときのheaderの指定方法について調べたことをまとめています。これまでなんとなく記述していたContent-TypeやContent-Dispositionについて触れています。

結論から書くと、ファイルをダウンロードさせたいときには次のようにheaderを書くと良さそうです。

* Content-Typeに適切なファイル種別を入れる
* Content-Dispositionをattachmentにする

私の理解では上記のような結論になりましたが、間違いなどありましたらご指摘いただけると大変嬉しいです。

## JSONファイルがブラウザに表示されずにダウンロードされる

この記事を書くきっかけになったのが、下記のコードです。

`index.php`

“`php
‘banana’, ‘price’ => 200],
[‘name’ => ‘orange’, ‘price’ => 150],
];

// jsonに変換
$data

元記事を表示

Laravelルーティングから起動まで

【概要】
—————————————-
1.プロジェクトの作成

2.ルーティング

3.起動方法

1.プロジェクトの作成
—————————————-

“`terminal
$ composer create-project laravel/laravel 名前 –prefer-dist
“`
名前に作成したいファイル名を記載するとその名前でファイルが生成されます。任意のファイルの中にで作成してください。

2.ルーティング
—————————————-

“`php:routes/web.php

元記事を表示

PHPバージョンアップ時にphp7compatibilityを使ってコード互換性を確認する

PHPバージョンアップ時にphp7compatibilityを使うと互換性を簡単にチェックする事ができます。
php7compatibilityを使う時、環境セットアップに多少準備が必要になるのですが、docker環境なら、すでに作成済みのdockerイメージが公開されているので、だいぶお手軽に環境を構築して確認する事ができます。

例えば以下はPHP7.1に対しての互換性を確認する際のコマンド例。
`–ignore=vendor`でvender配下をチェックから除外する事が出来ます。

“`php
docker run –rm -v $(pwd):/app vfac/php7compatibility 7.1 –extensions=php –ignore=vendor .
“`

### 参考

[vfalies/php7compatibility](https://github.com/vfalies/php7compatibility)

元記事を表示

CodeIgniter3でci-phpunit-test 2.xを利用したUnitTestいろいろ④(Coverage Reportを出力する)

# 概要

ci-phpunit-testで、色々と実装してきたphpunitのテストコードに対して、Coverage Reportを出力していきたいと思います。

# phpunit実行時に出ていた出力内容で

以下のようにphpunitを実行すると、Warningが出ておりました。

“`shell-session
# cd /var/www/html/codeigniter3/application/tests
# ../../vendor/bin/phpunit –testdox

PHPUnit 9.4.0 by Sebastian Bergmann and contributors.

Warning: No code coverage driver available
Warning: Your XML configuration validates against a deprecated schema.
Suggestion: Migrate your XML configuration using “–migrate-config

元記事を表示

php74 コアダンプ

似たようなの?
https://lists.freebsd.org/pipermail/freebsd-ports/2019-January/115381.html

“`
root@pt2:/usr/ports # php -v
PHP 7.4.11 (cli) (built: Oct 11 2020 15:23:02) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies
セグメントエラー(coreを出力しました)
“`

gdb

“`
#0 0x291883dc in openssl_lh_strcasehash () from /usr/local/lib/libcrypto.so.11
(gdb) bt
#0 0x291883dc in openssl_lh_strcasehash () from /usr/lo

元記事を表示

【初心者向け】郵便番号で住所検索をする外部APIを叩く

#はじめに

実務でいつ使用してもいいように、ローカル環境で外部提供のAPIを叩く練習をしていきます。
あと、長いこと使用していないAjaxの復習もかねて。

今回は会員登録時に住所入力をサポートする、最近のデファクトスタンダードな仕様を目指してフォームの作成をしていきます。

#使用API
郵便番号検索API
http://zipcloud.ibsnet.co.jp/doc/api

※画面下部にAPI利用規約がありますので、使用する場合は一読するようにお願いします。

〜以下引用(2020年10月11日)〜
郵便番号検索APIは、日本郵便が公開している郵便番号データを検索する機能をRESTで提供しています。
現在使用しているデータは、「2020年9月30日更新分の全国一括データ(加工済バージョン)」です。

#環境+使用ライブラリなど
macOS Catalina 10.15.7
MAMP(Apache + MySQL)
PHP 7.3.11
jQuery(Ajax通信に使う)
Bootstrap(別に必要ではない)

#今回のゴールとする仕様

– 半角数字で7ケタの郵便番号を入

元記事を表示

Laravelで画像をリサイズ&勝手に回転しないようにする(EXIFも削除)

# はじめに
Laravelで画像投稿機能を作ったは良いけど、

 `「投稿される画像が大きかったり小さかったりする..」`
 `「アップロード後に画像が勝手に回転してしまう..」`
 `「画像に埋め込まれた隠し情報が危険って聞いたけど..」`

そんな問題を解消していきます。

画像の大きさの問題はCSSで指定すれば表示は小さくできますが、
CSSは表示を変えるだけで保存される画像は大きいままです。
これではデータベース周りに負荷がかかってしまいます。

また画像には`EXIF情報`というものが埋め込まれていて、撮影したスマートフォンの情報だったり画像の向き、さらには撮影した場所などが記録されているものもあります。

これらを簡単に同時に最適化する方法をシェアしていきます。

# やること
以下の手順で行います。
 ① 現状のEXIF情報をみてみる
 ② InterventionImageをインストールする(Composerを使用)
 ③ InterventionImageを使えるようにする(Configの設定をする)
 ④ Controllerで実際に画像処理を行う

# 実際にや

元記事を表示

CodeIgniter3でci-phpunit-test 2.xを利用したUnitTestいろいろ③(DBアクセスを伴うModelクラスのUnit Test)

# 概要

ci-phpunit-testで、DBアクセスを伴うModelクラスのUnit Testを実装します。

CodeIgniter3でci-phpunit-test 2.xの環境を用意する方法については、[CodeIgniter3 + PHPUnit 9.4.0 + ci-phpunit-test dev-2.x を利用した Unit Test環境の整備](https://qiita.com/You_name_is_YU/items/df51b52820af9e41f2ec)に載っています。

このModelクラスのUnit Testの実装では、事前に[CodeIgniter3でci-phpunit-test 2.xを利用したUnitTestいろいろ②(Migrationの利用)](https://qiita.com/You_name_is_YU/items/21cb3f1c0f304fbb3885)の実装をしておく必要があります。

# ソースの構成

“`shell-session
.application
├── models
│   └── Gmo_result_n

元記事を表示

Laravel ベースレイアウトにDBから取得したデータを表示する

# 目的

– ベースレイアウトにテーブル内に格納されているデータを表示する方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージ

元記事を表示

CodeIgniter3でci-phpunit-test 2.xを利用したUnitTestいろいろ②(Migrationの利用)

# 概要

CodeIgniter3の機能にあるMigrationを利用します。
ここでは`ci-phpunit-test`でModelクラスのUnit Testを行う際に、自分なりに便利だなと思われる仕掛けも含めて構築します。

CodeIgniter3でci-phpunit-test 2.xの環境を用意する方法については、[CodeIgniter3 + PHPUnit 9.4.0 + ci-phpunit-test dev-2.x を利用した Unit Test環境の整備](https://qiita.com/You_name_is_YU/items/df51b52820af9e41f2ec)に載っています。

# ci-phpunit-test用の仕掛けとは

`ci-phpunit-test`を利用したModelクラスのUnit Testで実現したいなと考えていること。

– phpunit実行時に毎回DBが初期化されること
– 予期せぬデータが投入された状態ではなく、予期した状態で再現性のあるDBアクセスを含んだUnit Testを実行できること
– 開発環境(ENVIRON

元記事を表示

CodeIgniter3でci-phpunit-test 2.xを利用したUnitTestいろいろ①(curlをMock化したAPIのUnit Test)

# 概要

CodeIgniter3でのWebアプリケーション開発で、ci-phpunit-testを利用したテストコーディングを行いました。
試行錯誤しつつ、なんとなくこんな感じでテストすればいいのかな?というソースになったので、メモとして残します。

CodeIgniter3でci-phpunit-test 2.xの環境を用意する方法については、[CodeIgniter3 + PHPUnit 9.4.0 + ci-phpunit-test dev-2.x を利用した Unit Test環境の整備](https://qiita.com/You_name_is_YU/items/df51b52820af9e41f2ec)に載っています。
composerで標準的にセットアップされるものでは、バージョンが合わずに正常動作しないため、ちょっと大変でした。

ここでは、とりあえずcurlをMock化して、外部サービスのAPI実行を処理しているModelクラスのUnit Testについてまとめます。

# ソースの構成

“`shell-session
.application
├── mo

元記事を表示

Flutter × Laravel × Stripe で単発決済

#はじめに
約半年振りの投稿です。
最近はWeb開発から少し離れFlutterの開発を行なっております。

巷で流行っている言語&AndroidとIOSの開発を同一言語でできるというのが大変魅力で学習をはじめました。

KBOYのFlutter大学
https://www.youtube.com/channel/UCReuARgZI-BFjioA8KBpjsw

自分はこのチャンネルから学習を始めました。
超丁寧に説明していただけるので、初学者に大変オススメです!

##経緯
もともと決済処理はWebViewで決済処理を行う予定でした。
しかし、調べているうちに

https://digiryte.com/blog/posts/online-payments-made-easier-by-digiryte-by-flutter-and-ruby-on-rails

こちらの記事を発見しRailsでもできるならLaravelでもできるんじゃね?
と思ったのが事の発端です。

言語違いではありますが、実装例があるのに自分で実装できないのはちょっと悔しいと思い試行錯誤の末実装できました。

元記事を表示

OTHERカテゴリの最新記事