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

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

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でページネーション機能を導入したが
下記画像のように、上手くページ番号が表示されない。
:::

![スクリーンショット 2022-03-09 21.47.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525372/259b6878-c445-e433-ae24-91168090b89d.png)

ページネーション導入はこちらの記事を参考しました!

https://leben.mobi/blog/laravel8_pagination/php/

https://biz.addisteria.com/laravel8_pagination/

### 何が原因だったか

“`CSS“`が反映されていないことが原因です。
では、CSSを見てみました。

![スクリーンショット 2022-03-09 21.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

macのPHPのバージョンを8.1にアップデートする

# PHPを8.1にバージョンアップしたい
先月Laravel9がリリースされ、PHPのバージョンが8.0以上必要になりました。
ついでに8.1からはEnum型なども導入され、いろいろ変化してるみたいですね。
macOSにはもともとphpが入っていますが、手元の環境では7系だったのでHomebrewを用いてインストールしたいと思います。

## バージョン確認

デフォルトではv7.3が入っていました。
“`sh
% php -v
WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.24-(to be removed in future macOS) (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してみたら違和感が・・・。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250158/0433f512-947c-0875-9cb2-33addc96397e.png)

#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に登録したいようなケースがあるよな(例えばマスタとして全量が登録してあって、そのなかから取り扱ういくつかを選択して、以降は選んだものだけを表示する管理画面みたいなやつな)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94562/27982df3-3863-99d7-5e2b-8801ce9d1e74.png)

探すと `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

元記事を表示

OTHERカテゴリの最新記事