- 0.1. Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件
- 0.2. Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスしたい(nginx / Docker / Zend Framework 3)
- 0.3. 【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき
- 0.4. macのPHPのバージョンを8.1にアップデートする
- 0.5. ポートフォリオとして、PDCA管理のアプリを作成しました。
- 0.6. ADRパターン
- 0.7. 【PHP】foreach小ネタ
- 0.8. WordPressのACFデイトピッカーでデフォルト値に現在日付の一カ月後を設定する
- 0.9. WordPressでACFデイトピッカーのデフォルト値に現在日付の一カ月後を設定する
- 0.10. PHP8のコンテナでdocker stopしてるのにSIGTERMが送られていない事象について
- 0.11. 12: 値による代入と参照による代入
- 1. 値による代入と参照による代入
- 1.1. laravel学んで2か月で自サービスを開発した話 Part9
- 1.2. composerがウクライナを応援しているのを見つけてみた #StandWithUkraine
- 1.3. 直前のリクエストURLからクエリパラメータを抽出
- 1.4. HTMLのinputの配列は添字に key が指定できる
- 1.5. PHP の BC Math 関数のわかりにくい間違え方
- 1.6. マーカーをバインドしてSQLインジェクション対策
- 1.7. PHPでIteratorパターン実装しようとしたら、すでに便利なやつらがいた
- 1.8. laravel RefreshDatabase 高速化
- 1.9. PHP traitの継承的な書き方
Laravel api.phpに記載したURLがデフォルトで/apiついてしまう件
LaravelでAPI作成のした際にルーティングでroutes/api.phpに記載すると /api/〜になってしまう。
/api部分を無くすためにはapp/Providers/RouteServiceProvider.phpの以下を削除すればいい。
“`
Route::prefix(‘api’) //prefixを削除
->middleware(‘api’)
->namespace($this->namespace)
->group(base_path(‘routes/api.php’));
“`
Zend FrameworkのWelcomeページにhttp://localhost/application/indexでアクセスしたい(nginx / Docker / Zend Framework 3)
諸事情で Zend Framework を初めて学習中の西暦2022年。Zend Framework公式ドキュメントのtutorialを元にハンズオン学習している。
## 1. やりたいことを確認する。
– Zend FrameworkのWelcomeページは http://localhost/ もしくは http://localhost/application/index にアクセスするとWelcomeページが表示されるようにルーティングを設定できるようになっており、そのようなに表示されるようにしたい。
– 開発環境の構築にDockerを利用しており、下記の構成にしている。(Zend Framework の公式ドキュメントでは、Webサーバは Apache が使用されており、 nginx についての記述はない。)| Dockerコンテナ | Dockerイメージ | 備考 |
| — | — | — |
| web | nginx:1.18.0-alpine | |
| app | php:7.4.19-fpm-
【Laravel8】ページネーションのCSS(Bootstrαp)が反映されないとき
### エラー状況
:::note alert
Laravelでページネーション機能を導入したが
下記画像のように、上手くページ番号が表示されない。
:::
ページネーション導入はこちらの記事を参考しました!
https://leben.mobi/blog/laravel8_pagination/php/
https://biz.addisteria.com/laravel8_pagination/
### 何が原因だったか
“`CSS“`が反映されていないことが原因です。
では、CSSを見てみました。 (cli) (built: Jun 17 2021 21:41:15) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine
ポートフォリオとして、PDCA管理のアプリを作成しました。
# はじめに
### 記事の目的
ポートフォリオとして作成したWebアプリケーションの紹介記事です。注:PDCAとは
https://cicou.under.jp/myPDCA/login.php
# アプリの概要
# 機能
### 登録
### 一覧
### 編集
### 削除
# 使用技術
### バックエンド
– PHP
### フロントエンド
– HTML
– CSS
– bootstrap
### データベース
– MySQL
### デプロイ
–
# 工夫した点
### 見やすさ
# 最後にhttps://cicou.under.jp/myPDCA/login.php
ADRパターン
# ADRの概要
– Action-Domain-Responder
– ソフトウェアアーキテクチャパターンの1つ
– MVCの改良版# MVCと違うところ
1つのアクションに対して、そのリクエストからレスポンスを定義する。## MVCの場合
例えばMVC実装だと、1つのコントローラーに
– index
– insert
– update
– deleteなどアクションを複数定義する。
## ADRの場合
1クラス1アクションにより
– シンプルなリクエスト→レスポンスの流れ
– 1クラスの責務が明確# 構成
## Action
リクエストを受け取り、ドメインの処理結果をレスポンダに渡す## Domain
必要な処理を行い結果を返す
ビジネスロジックはここに含まれる## Responder
ドメインの処理結果を受け取り、必要な準備を行いレスポンスを返す# 実装例
PHP/Laravel## Actionクラス
– Controllerクラスを継承
– コンストラクタでドメインオブジェクトとレスポンダオブジェクトを注入
– レスポンダに渡す処理をinvo
【PHP】foreach小ネタ
# コード
“`PHP
1, “name” => ‘Tom’],
[“id” => 2, “name” => ‘Fred’],
];
foreach ($data as [“id” => $id, “name” => $name]) {
echo “id: $id, name: $name”.PHP_EOL;
}“`
# 結果
“`
id: 1, name: Tom
id: 2, name: Fred
“`
WordPressのACFデイトピッカーでデフォルト値に現在日付の一カ月後を設定する
実装しといて何ですが、ボツになったので供養のため残します。
デフォルト値の設定ってこんなめんどくさいことしなきゃいけないんですかWordPressって。左サイドバー > 外観 > テーマエディター をクリック後
右サイドバー > テーマファイル > テーマのための関数 (functions.php) をクリックファイルの末尾に以下の内容を追記して保存する
“`php
/**
* 現在日付の一カ月後を文字列で取得
*/
function show_next_month_from_now()
{
$dt = new DateTime();
$dt->modify(“+1 month”);
$date = $dt->format(“Y-m-d”);
return $date;
}/**
* カスタムフィールドのデフォルト値を設定する
*/
function acf_my_custom_field_name_callback($field)
{
$field[‘default_value’] = show_next_month_f
WordPressでACFデイトピッカーのデフォルト値に現在日付の一カ月後を設定する
実装しといて何ですが、ボツになったので供養のため残します。
デフォルト値の設定ってこんなめんどくさいことしなきゃいけないんですかWordPressって。左サイドバー > 外観 > テーマエディター をクリック後
右サイドバー > テーマファイル > テーマのための関数 (functions.php) をクリックファイルの末尾に以下の内容を追記して保存する
“`php
/**
* 現在日付の一カ月後を文字列で取得
*/
function show_next_month_from_now()
{
$dt = new DateTime();
$dt->modify(“+1 month”);
$date = $dt->format(“Y-m-d”);
return $date;
}/**
* カスタムフィールドのデフォルト値を設定する
*/
function acf_my_custom_field_name_callback($field)
{
$field[‘default_value’] = show_next_month_f
PHP8のコンテナでdocker stopしてるのにSIGTERMが送られていない事象について
## 概要
PHP8のDockerコンテナに対して
docker stop
や
docker-compose stop
をしてもSIGTERMが送られず
phpスクリプトに記載のシグナル制御がうまく動かなかった。## 原因
利用したDocker ImageにてSTOPSIGNALによりデフォルトのSIGTERMから別のシグナルに変更されていたため。
## 詳細
### Docker Image
https://hub.docker.com/r/phpdockerio/php80-fpm
### docker-compose
“`yml:docker-compose.yml
version: ‘2.0’
services:
app:
container_name: php8
image: phpdockerio/php80-fpm
volumes:
– ./:/var/www/html/
command: php /var/www/html/test.php
“`### test.php
“`php:test.
12: 値による代入と参照による代入
値による代入と参照による代入
これまで、変数とは「値を格納するための入れ物」と説明してきたが、少しだけ嘘が混ざっている。笑
値を格納するのは、厳密にはコンピューター上に用意されたメモリの役割である。
メモリには、それぞれの場所を表す番号(アドレス)が振られている。
しかし、コードに意味のない番号を記述するのでは、見た目もわかりにくいし、タイプミスの原因にもなる。
そこでアドレスに対して、人間が分かりやすいように名前をつけておく。
それが変数の正体である。変数とは、値の格納先(アドレス)に対して付けられた名札と言っても良い。
|メモリ||
|:-:|:-:|
|アドレス| 値 |
|0||
|10|1 `(変数$xはメモリ上のアドレス10に格納)→ $x = 1;`|
|20||
|30|5 `(変数$yはメモリ上のアドレス30に格納)→ $y = 5;`|
|40||
|50||アドレス10から値を取得↓
“`
print $x; →
laravel学んで2か月で自サービスを開発した話 Part9
今までの開発記録はこちらへ
胡蝶蘭を捨てるくらいならワイが欲しいので、サービス開発する編
公式ドキュメントの言う通り、パッケージをインストールされたら、Inertia.jsが導入されて???になった編
マルチログインを作ってみた編
デザインをtailwindcssに丸投げする編
デザイナーに怒ら
composerがウクライナを応援しているのを見つけてみた #StandWithUkraine
ふとcomposer updateしてみたら違和感が・・・。
#StandWith Ukraine
「ウクライナと共に立ち上げれ」的なメッセージが!!どうやら、こちらのIssueでメッセージが表示されるようになったようです。
https://github.com/composer/composer/issues/10582追従するプロダクト出てきそうですね。
# 追記
コミットを見てみたら意外と賛否両論
https://github.com/composer/packagist/commit/86244a3695fcaaac9c5ba4257a4314eae1c6d981#/気軽に手を出してはいけなそうです。
直前のリクエストURLからクエリパラメータを抽出
### リクエストクラスのquery()メソッドと同様の結果にしたい
“`
use Illuminate\Http\Request;
$request->query()
“`array:1 [▼
“email” => “desc”
]
# 直前のリクエストURLからクエリパラメータを抽出
`parse_url(url()->previous())`
laravelヘルパのurl()から直前リクエストのurlを取得後にphpのparse_url関数で以下の形で取得できる
array:1 [▼
“scheme” => “http”
“host” => “http://localhost”
“path” => “/sort/index”
“query” => “email=desc”
]
ここから必要なqueryの値を取得して無理やり「=」で区切り、配列にする
その配列の最初をkeyにして最後をvalueにすることで、query()メソッドと同様にした
“`
$query = exp
HTMLのinputの配列は添字に key が指定できる
## はじめに
inputで入力された値をphp側で把握してdbに登録したいようなケースがあるよな(例えばマスタとして全量が登録してあって、そのなかから取り扱ういくつかを選択して、以降は選んだものだけを表示する管理画面みたいなやつな)
探すと `name=”use_cert[]”` みたいにやるんだぜ、って出てくるんだけど、配列の index は 0ベースである。stackoverflow を当たっても javascript で上書きするようなやり方しかねぇ。
・・・上書き?:rolling_eyes: ふとひらめいたhttps://www.google.com/search?q=html+input+%E9%85%8D%E5%88%97&oq=html+input+%E9%85%8D%E5%88%97&aqs=chrome..69i57j0
PHP の BC Math 関数のわかりにくい間違え方
# これは何?
https://qiita.com/takogaki/items/5cb37b157b2a612ffa93
を拝見し、へー PHP には `bcadd` `bcmul` とかいう関数があるんだへーと思い。
動作確認したら想像と違っていたのでその記録。# BC Math の特徴
[bcadd の公式ドキュメントらしきもの](https://www.php.net/manual/ja/function.bcadd.php) を見ると分かる通り、 `bcadd` などの引数は文字列になっている。return value も文字列。
そうでないと困る。# 気になったこと
## 引数は文字列にする必要がある
公式でない文書にはよく
“`php:PHP
マーカーをバインドしてSQLインジェクション対策
PHPにてSQL INSERT文を実行するにあたりSQLインジェクション対策を行うために。
SQLクエリを作成。VALUES()の中の値はマーカー’?’とする・・・①
Prepared statementに作成したクエリを登録。・・・②
作成したマーカーにパラメータをバインドする。・・・③
“`php
prepare(“INSERT INTO team (player) VALUES (?)”); //①、②
$statement->bind_param(“s”, $player); //③
?>
PHPでIteratorパターン実装しようとしたら、すでに便利なやつらがいた
ある日、Iteratorパターンで実装しようとInterfaceを書きかけた時、こんな記事が見つかりました。
[PHP でイテレータを使って関数型プログラミングっぽい雰囲気を出す: range 編](https://qiita.com/Hiraku/items/14722922441f9ed3fbbb)どうやらPHPには既にIterator達が実装されており、よしなに使うことができるらしい。。。
Interfaceの中身を見ると、少しAggregateで実装すべきメソッドが多いし、ちょっと面倒だなと思ったところ、こんな記事が見つかりました。
[Iteratorをimplementsする奴は情弱。IteratorAggregateを使え](https://qiita.com/Hiraku/items/14722922441f9ed3fbbb)見てみるとサクッと実装できて便利!と思ったので、思わず記事にしちゃいました。
## そもそもIteratorパターンとは??
繰り返し処理のためのデザインパターンです。
反復処理を内部の処理によらないようにできるのがメリットですね。クラ
laravel RefreshDatabase 高速化
laravelのRefreshDatabaseが時間がかかるため、高速化したはなし
# 環境
“`
laravel: v5.5.50
phpunit/phpunit: 5.7.27
“`# 原因
“`:vender/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php
//…/**
* Refresh a conventional test database.
*
* @return void
*/
protected function refreshTestDatabase()
{
if (! RefreshDatabaseState::$migrated) {
$this->artisan(‘migrate:fresh’);$this->app[Kernel::class]->setArtisan(null);
Ref
PHP traitの継承的な書き方
traitの継承的なやり方について、適切な記事がなかったので自分なりのまとめ
# php version
“`:bash
bash-4.2# php -v
PHP 7.1.33 (cli) (built: Oct 31 2019 17:37:57) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
“`# traitの継承的な書き方
“`test1.php