PHP関連のことを調べてみた2023年09月15日

PHP関連のことを調べてみた2023年09月15日

Laravel を使用していて Docker コンテナの起動に失敗する場合に composer install をするには docker-compose run を実行する

# TL;DR

コンテナを `docker-compose up` で起動せずに特定のコマンドを実行するには `docker exec` ではなく `docker-compose run ` を実行する。

# 発生したエラー

Docker 内で Laravel を使用していたところ、Docker コンテナの起動に失敗する現象が発生しました。

“`bash
$ docker-compose up
# 中略
my_container |
my_container | Warning: require(/var/www/my-app/vendor/autoload.php): failed to open stream: No such file or directory in /var/www/my-app/artisan on line 18
my_container |
my_container | Fatal error: require(): Failed opening required ‘/var/www/my-

元記事を表示

PHP7系で readonly なプロパティを擬似的に再現するサンプルコード

新人研修用途で書きました

# まえがき

PHP8系には、一度値を格納したら以降上書き出来ないという素晴らしい readonly なプロパティが存在します
ただPHP7系には存在しないため、何とか擬似的にでも再現したいと言うのが今回のお話です

さすがに readonly プロパティと完全に同じ挙動を再現しようとすると非常に大変なので、「外部からプロパティを上書き不可、読み込みのみ可能」という点だけ再現します

# サンプルコード1

権限を管理するバリューオブジェクトクラス
ログインユーザーがどの権限を保持しているかを判定する責任を持つクラスです

“`php
use InvalidArgumentException;
use OutOfBoundsException;

/**
* 権限クラス
*
* @property-read int $value 格納されたミュータブルな値
* @property-read bool $isAdmin 社内管理者かどうか
* @property-read bool $isClientAdmin クライアント管理者かどうか
*

元記事を表示

Windowsのローカル環境でLaravelのGoogleログインを実装してみた話

# はじめに
最近はかなりのサイトで採用されているソーシャルログインですが、自分で実装したことがなかったので、調査のために環境構築から動作確認までやってみた備忘録です。
キャプチャを残してないので文字ばかりなのはご容赦ください。
バージョンは2023年9月当時のものとなります。
コマンドの実行は基本的にコマンドプロンプトでやってますが、PowerShellでも問題ないはずです。
# 環境構築
## PHP
1. [PHP For Windows: Binaries and sources Releases](https://windows.php.net/download/)から「PHP 8.2 (8.2.9)>VS16 x64 Thread Safe (2023-Aug-01 13:08:42)>Zip」をダウンロード
2. 「C:\php」に解凍
3. 環境変数の「Path」に`C:\php`を追加
4. `php -v`を実行して`PHP 8.2.9`と表示されたらOK
## Composer
1. [Composer](https://getcomposer.org/downl

元記事を表示

?はじめてのPHP

***:cherries:学んだことを随時まとめてく:cherries:***
間違っている点があれば是非教えていただきたいです
***
# 対象者:fist_tone1:
– Rails学習者(私)
– PHP初学者(私)

# 文法ルールの基本
“`php5:

“`
# データ型
– 文字列型(String)
– 整数型(Int)
– 少数型(Float)
– 論理値型(Bool)
True/False
– NULL型
NULL

# キャスト演算

array_flip(): Can only flip string and integer values, entry skipped エラーが出た時の対処法

# エラーメッセージ

“`
array_flip(): Can only flip string and integer values, entry skipped

//文字列と整数値のみを反転できます。入力はスキップされます
“`

# 問題のコード

“`.php
$allCookie = $request->cookie();
$allCookie = array_flip($allCookie);
“`

# 原因
`array_flip()`は配列(連想配列)のキーとバリューを入れ替えるメソッド。
`array_flip()`は文字列と整数値のみしか扱えない。

`$request->cookie()`でcookieを取得したが、内容は下記で`NULL値`が存在したためエラーとなった。

“`
^ array:4 [▼
“ABC_asdfpipoij3” => null
“CLA_sdfgsg” => null
“XSRF-TOKEN” => “RRY2bgJ1h2onOYmsdfgsdfSmTVa2OrdrNNBaXYDsg8PnBOp”

初心者がWSL2 + Docker Desktop + PhpStorm でPHP開発環境構築で詰まった話

## 実行手順

こちらのブログを参考に構築しました。

https://blog.odaryo.com/2021/08/win-dev_env-with-docker-desktop-1/

https://blog.odaryo.com/2021/08/win-dev_env-with-docker-desktop-2/

## 起きた問題

docker-compose build が失敗する。

“`=> ERROR [php-fpm 3/8] RUN pecl install -f xdebug && docker-php-ext-enable xdebug && apk del –purge autoconf g++ make 5.6s“`

上記のエラーメッセージが表示ながらも、docker-compose build自体は止まらず。
別Ubuntu Window で強制終了た。

#### 強制終了のコマンド:

`ps aux | grep docker-compose`

でプロセスコードを確認

`kill -p プロセスコード`

【PHP】コーディング標準とは

## はじめに
PHPは多くのプロジェクトで使用される人気のあるスクリプト言語です。しかし、コードが複数の開発者によって書かれる場合、コーディングスタイルが一貫していることは非常に重要です。こうした課題を解決するために、PHP-FIG(PHP Framework Interop Group)はPSR(PHP Standards Recommendation)と呼ばれる一連のコーディング標準を開発しました。その中でも、PSR-2はPHPコミュニティで広く採用されているコーディングスタンダードです。この記事では、PSR-2の主要なルールと一貫性のあるコーディングスタイルについてまとめます。

## PSR-2とは何か?
PSR-2は、PHPコーディングの一貫性を確保するためのコーディング標準です。PHP-FIGによって策定され、多くのPHPフレームワークやプロジェクトで採用されています。PSR-2に従うことにより、コードの可読性が向上し、コードベースが整然となります。

## PSR-2の主要なルール
以下はPSR-2の主要なルールの一部です。

1. **インデント:**

*

controller から template に渡した変数を型補完したい!

# 2行結論

CakePHP は OK
Laravel は blade ディレクティブ使ってると難しい

# CakePHP

vscode で開発していて、テンプレート側でも何とか型補完出来ないかしばらくの間試行錯誤していましたが、 CakePHP ではようやく解決したのでメモ

恥ずかしい話 @var でも変数名を指定できるのを今まで知りませんでした…
言い訳になりますがプロパティ定義時とか変数への代入時とかでしか使ってなかったので

## サンプルコード

index.ctp (v3)、 index.php (v4)

“`php


isAdmin()) ?>


“`

## 試行錯誤して駄目だった例

このパターンの記述は変数への代入やプロパティ定義でないと駄目なんですね

“`php

【Laravel】artisanコマンドはアプリケーションのルートディレクトリでしか使えない。

# はじめに
開発途中では気にもしなかったが、Dockerに上げた際にきちんと動いているかな~と、logなどをCUIを使って確認していく中でartisanコマンド叩いてみたら思わぬところで躓いたので書きます。

# 原因
原因は至ってシンプルでした。
CUI使っていろんなディレクトリを移動していく中で、ルートディレクトリにいないのにartisanコマンドを打っていたからでした。

# 解決策
artisanコマンドは、そのアプリケーションのルートディレクトリにいないと機能しないそうです。
理由はartisanコマンドは様々なタスクを実行するために使用されるため、Laravelプロジェクト内のリソース、設定、データベース、ルートなどにアクセスするためのコンテキストが必要です。プロジェクトのルートディレクトリで実行されることを前提としており、そこから必要な情報にアクセスできるようになっているからとのこと。

ソースコードの整理は大変な作業

# はじめに
世の中には、有料、無料のソース管理のパッケージはいろいろありますが、ここでは、それらの製品は使わず、使用している開発ツール(NetBeans8.2 IDE)内のフォルダーに保存しているソースファイルについての話です。
NetBeans8.2 IDEの開発エデイターでプログラムを作成し、保存しますが、これが、大量に溜まってくると、あとで、見返したときに、何が何だか分からなくなっています。
一応、フォルダーはサイトごとに作成しています。その中に、さらにcss,images,js他を作成してファイルを保存しています。htmlとphpファイルは親フォルダーに保存しています。ここで、問題になるのは、例えばjsフォルダーや親フォルダー内のhtmlやphpファイルです。それらのファイルは、たくさん出来上がります。ファイルの名称をうまく命名できれば、まだ助かりますが、面倒がって、いい加減に命名しているとあとで、何が何だか分からなくなります。

Empty Minimal WP_List_Table Examples

# function WP_List_Table::prepare_items() must be overridden in a subclass.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/c19c5b4c-8cd8-cab8-a1fe-16eeec60dabd.png)

“`php

やってみたLaravelチュートリアル③

# はじめに ?
[Laravelの教科書](https://amzn.asia/d/1xFOXD5)という本を見かけたので、
勉強のために、チュートリアルとして頭からやってみました。
その個人的な記録です。

本は 350ページ、12章 ありますが、内容的に
2~10章が手を動かしてやる系ぽいです。

環境構築の第2章、仕組みの第3,4章は済ませました。

– [やってみたLaravelチュートリアル①](https://qiita.com/tmatsumor/items/2cc8f9ac49a6fa28ad37)

– [やってみたLaravelチュートリアル②](https://qiita.com/tmatsumor/items/d2f1495ad1e2e8c099a1)

次の第5章、第6章に進みます。

:::note info
本が手元にあることが前提となっています
:::

# Ⅴ.データベース
第5章では、Laravel との DB連携について解説してあります。
一つずつ見ていきます。

## 1.DBの設定
プロジェクトごとのDB設定は config/database

【備忘録】cakePHP4でControllerと違う名前のModelを使いたいとき

# Model側に処理を作っておく
データのやり取り自体は`controller`の中ではなく、`Model/XXTable.php`に書くのがスマートらしい。
“`php:Model/UsersTable.php
public function findUserDataOneByUsername($username)
{
if(empty($username)) {
return null;
}
return $this->find()
->where([‘User.username’ => $username])
->first();
}
“`

# 同じ名称のModelを使用する場合
“`php:UsersController.php
class UsersController extends AppController
{
public function view($username = null)
{
// findUserDataOn

WordPress 固定ページにPHPファイルを反映させる方法

テーマのfunctions.phpに追加

“`php
// phpfile ショートコードで PHP ファイルを読み込む
function include_php_file($atts) {
$atts = shortcode_atts(array(
‘file’ => ”, // ファイル名を指定
), $atts);

if (empty($atts[‘file’])) {
return ”; // ファイル名が指定されていない場合は何も表示しない
}

ob_start();
include(get_template_directory() . ‘/’ . $atts[‘file’]);
return ob_get_clean();
}
add_shortcode(‘phpfile’, ‘include_php_file’);
“`

テーマのfunctions.phpと同じ階層に
追加したいPHPファイルを追加(tuika.php)

固定ページにて
[phpfile file=”

[Laravel10]Blade Componentで平文を渡したい

# 環境
Laravel 10 (8~)

# TL;DR
`$slot->toHtml()`
の利用で受け渡した平文が取り出せるので

“`oya.blade.php

いぬ
dog

“`

“`component/item.blade.php
Laravel で json をDBに保存した時にUnicodeエスケープされる

## Eloquent での json の使い方
(環境: PHP 8.1以上、Laravel 10)
LaravelのEloquent(Model) で json を扱う時は、モデルに以下のように記述と思います。
![casts](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71497/8e7828ee-6e01-4391-eedf-9a4362a651fa.png)

入出力する際に json を encode/decode することなく扱えます。
![配列をそのまま保存](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71497/c9d3de8c-341f-9d73-b74e-5c9ce91de48d.png)
casts 便利ですね。

## 罠
非常に便利ですが、罠があります。
環境によって unicode にエスケープされたりされなかったりするのです。
![unicodeエスケープされたデータ](https://qiita-i

本格中華を食べたい中国人は、ポートフォリオとして中華系レシピアプリを作った話。

# 作りたいものは?

**本格!手軽!中華料理のレシピ投稿アプリーー「食華(しょくか)」**

– 背景:私はグルメが大好きな中国人です。5年ほど前、私は日本に来たばかりの頃、日々本格中華料理を恋しくなりました。その後、コロナ禍の影響の下で自宅で料理を作り始め、中華料理を作る習慣をつけました。日本人の友達としょっちゅう中華料理を食べたり、自分が作った中華料理をみんなに一緒にシェアしたり、いい思い出を作りました。しかし、私は自分が好きなことからいろんな問題点を見つけました。
– 問題点1:来日中国人留学生人数の増加によって、池袋や高田馬場では本格中華料理店が増えました。しかし、中華料理店の外食費は母国より高いです。
– 問題点2:東京と比べて、地方の中華物産店と本格中華料理店が少ないので、地方住みの中国人にとって母国の味を食べるのはかなり不便になります。
– 問題点3:中華料理に興味があるが、作り方がわからない日本人もいます。自分が日本のスーパーで手軽に買える食材を買って中華料理をアレンジしたので、自分の工夫点をシェアしたいです。

そのため、日本で手軽に中華料理を食べたい、あるいは作

M2 macでxdebugがインストールできなくて困った話

# 結論
sudo 付けたら行けた。
“`
> sudo pecl install xdebug
“`
# 経緯
`pecl install xdebug`すると、エラーが出るし、手動でビルドするかー。

# 環境情報
“`
> sw_vers
ProductName: macOS
ProductVersion: 13.5.2
BuildVersion: 22G91

> php -v
PHP 8.1.23 (cli) (built: Aug 31 2023 18:43:16) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.23, Copyright (c) Zend Technologies
with Xdebug v3.2.2, Copyright (c) 2002-2023, by Derick Rethans
with Zend OPcache v8.1.23, Copyright (c), by Zend Technologies
“`

# 手動でビルドするも

手動でビルドしようと思い実

PHP ハイアンドロー・カードゲーム

# はじめに
paizaでハイアンドロー・カードゲーム問題での備忘録です。
問題が解決済みの方・わからなかった方のみ読むことを推奨します。

# Paiza C問題 ハイアンドロー・カードゲーム問題文
paizaカードゲームは、複数枚の子カードそれぞれが、1枚の親カードとの強弱関係で勝負するゲーム。
どのカードにも2つの番号が書かれています。
1つ目の番号は1から10の整数、2つ目の番号は1から4の整数で表されます。
また、2つの番号の各組み合わせは1枚だけカードの束に含まれています。(同じカードが2枚以上存在しません)

2枚のカードの強弱関係は、次のルールによって決まります。
・1つ目の番号が大きいカードのほうが強い
・1つ目の番号が同じ場合、2つ目の番号が小さいカードのほうが強い

親カードと子カードの情報が与えられるので、それらの強弱関係を調べるプログラムを作成してください。

# 入力される値
“`
a b
n
A_1 B_1

A_n B_n
“`
1行目では親カードの情報が与えられます。親カードの1つ目の番号は a、2つ目の番号は b で表されます。
2行目では

PHP_エラー備忘録

## はじめに
PHP学習中に起こった、解決まで時間がかかったエラーをどう解決したかまとめる

## Uncaught Error: Call to undefined function ○○(mb関数)
##### 試したこと
1. 独習PHPのセットアップ順を再度試した
1. XAMMP再インストール
1. php.ini
1. **環境変数PATH再設定&最も上に設置**
2. **学習用コードファイルをhtdocsディレクトリにコピー**
2. VSCode
1. settings.json確認
1. 拡張機能確認
3. ネット検索

?環境PATH設定確認した所、指定先が間違っていた
  学習用コードファイルをhtdocsディレクトリにコピーし、そこからファイルを実行したときに上手くいった
※原因はわからん