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

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

ユーザー認証しないLaravel Sanctum

そんなケースあまり無いと思いますが、SanctumでトークンベースのAPI作りたいけど、ユーザーのログインは必要ないときのメモです。

# 準備
#### 導入
まずは以下に則って導入します。

https://readouble.com/laravel/8.x/ja/sanctum.html

# 実装
#### モデル作成
まずは、Sanctumを導入したときに追加されるテーブルのモデルを作ります。

“`php:PersonalAccessToken.php
use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;

class PersonalAccessToken extends SanctumPersonalAccessToken
{
use HasApiTokens;
/** 省略 **/
}
“`
通常HasApiTokensはUserモデル等でuseしますが、今回はユーザー認証が必要ないので、自分自身に紐づくようにPersonalAccessTokenでuse

元記事を表示

Doctrine ORMでPostgreSQLのforeign keyをDEFERRABLE INITIALLY DEFERREDにする

Doctrine ORMでリレーションを定義すると、PostgreSQL用のforeign key(外部キー制約)は `NOT DEFERRABLE INITIALY IMMEDIATE` となります。

Doctrine ORMを使っているPHPアプリケーションのみで使うデータベースを作っている場合は特に問題にはならないでしょう。すべてのデータベースアクセスはDoctrine ORMを使って行うので、foreign keyのオプションを気にする必要はないからです。(PostgreSQLの便利機能は使わない前提)

では、他のシステムとデータベース全体や一部テーブルを共有する場合など、データベース設計としてdeferrableなforeign keyがほしいときはどうすればいいか?

## Doctrine ORMのDDL管理の仕組み

(ORM) マッピング定義(annotation,attribute,yaml,php設定ファイル等でPHPのクラスにマッピング定義をつける)

(ORM) MappingDriverが各形式のマッピング定義を読み込み、連想配列化

(ORM/DB

元記事を表示

はじめてのDocker In Windows

## 概要
この記事は、初めてDockerを触って複数のコンテナを連携させたAPIサーバー環境を
作成するところまでの手順をまとめたメモです。
これから初めてWindowsでDockerを触ろうという方の取っ掛かりになれば幸いです。

## 環境
– Windows10
– git bash
– Windows Terminal
– Rancher Desktop

## 準備
Dockerを使うために [Rancher Desktop](https://rancherdesktop.io/) をインストールします。

インストーラをダウンロードして起動し、最後までインストールが完了したらターミナルで`docker`コマンドが使えるかの確認を行います。

“`bash
$ docker –version
Docker version 20.10.17-rd, build c2e4e01
“`
無事にインストールできたようです。

## 普通にコンテナを作成してみる。
Apacheがインストールされたコンテナを作成し、ブラウザでアクセスできるところまでやってみます。

### イメ

元記事を表示

地図(Google Map)の任意地点に円を描き、人口データの属性を持つ町丁目ポリゴンを取得し、表示する

# 概要説明
Google Mapを使用し、地図の任意地点に円を描き、円内のエリアを人口データの属性を持つ町丁目ポリゴンで表示させ、データを取得してみました。この記事は[Maps JavaScript APIを使ってGoogle Mapに町丁目ポリゴンを表示してみる](https://qiita.com/yan_x/items/c069c8fb7c5d2648fe50)の拡張内容です。Google Mapの地図表示や地図上のポリゴン表示に興味がある方は上記の記事を一読頂ければ幸いです。

## 使用するもの
* Google Map
* Maps JavaScript API
Google Mapで提供されている API の中の一つで、独自のコンテンツと画像を使って地図をカスタマイズして、ウェブページおよびモバイルデバイスに表示できます。

https://developers.google.com/maps/documentation/javascript?hl=ja

* PHP
* JavaScript
* 町丁目ポリゴン(TerraMap API)
町丁目とは行政界の一つで「

元記事を表示

【続・年末年始は積みゲーを消化したい!】PHP + Steam Web API + discord-php で Discord Bot に自分の積みゲーを発言させる

本記事は、[サムザップ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/sumzap) の12/7の記事です。

# はじめに
はじめまして、サムザップの[北島](https://twitter.com/RyotoKitajima)です。

ゲーム会社で働いているだけあって、私はゲームが大好きです!
特にPCゲームが大好きなのですが、仕事が忙しい社会人はついつい積みゲーが増えがちですよね(ゲームを買っただけで満足してしまう…)。

自分はどのくらい積みゲーが溜まっているのか!?
それを把握するため、[12/4の記事](https://qiita.com/RyotoKitajima/items/b9cbe230c42ab85d50b6)では、Steam Web APIを使った簡単なPHPプログラムを動かし、自分のSteamアカウントの積みゲー(プレイ時間が1時間以下のゲーム)の一覧を取得しました。
そして、その結果、91本もの積みゲーが溜まっているという状況が分かりました。
もうすぐ年末年始の休みが来ますが、さ

元記事を表示

DockerでのLAMP環境構築手順(Amazon Linux 2/PHP8.1(Laravel9)) ⑦Laravel 9 系のインストール(全8回)

# はじめに

かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/f64f4672-7016-bf2f-d895-b722540d10f7.png)

全 8 回を予定しています。

[① 作成する環境の確認](https://qiita.com/ryamate/items/47183e1ffd4843ef18fa)
[② Apache の導入](https://qiita.com/ryamate/items/e5ca19aece61717b6a01)
[③ PHP 8.1 系のインストール](https://qiita.com/ryamate/items/7a38eb11d64d504a7a22)
[④ Composer のインストール](https://qiita.com/ryamate/items/a8bbd003c

元記事を表示

CLIツールを簡単に作れる、”Console”

[Symfony Component Advent Calendar 2022](https://qiita.com/advent-calendar/2022/symfony-component)の7日目の記事です。

## 最初に
[Symfony](https://symfony.com)はPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

> Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、Sy

元記事を表示

React(MUI)+PHP(Laravel)+PostgreSQLで環境構築~DB取得まで

今まで、WEBアプリはjsp/servletばかりで開発していました。
今回はSPAで簡単なCRUDアプリを作成するために必要な勉強をしました。
その際に一連の情報がまとまっていると便利かと思い、備忘録として記していきたいと思います。
改善点・誤記等ありましたら、コメントにてご指摘いただけると幸いです。

# 目次
– [やりたいこと](#やりたいこと)
– [環境構築](#環境構築)
– [事前準備](#事前準備)
– [React](#react)
– [React基本パッケージインストール](#react基本パッケージインストール)
– [Reactプロジェクトの作成](#reactプロジェクトの作成)
– [Reactローカルサーバー立ち上げ](#reactローカルサーバー立ち上げ)
– [React用ライブラリインストール](#react用ライブラリインストール)
– [PHP](#php)
– [PHP基本パッケージインストール](#php基本パッケージインストール)
– [PHPプロジェク

元記事を表示

DoctrineとEloquent比較大全7: テーブル間のリレーションを定義

day7の今日は、テーブル間に外部キーによるリレーションがある場合にDoctrine, Eloquentそれぞれでどうやって表すか見ていきます。

SQL的にはauthorsテーブルとbooksテーブルへのauthor_idカラム(authors.idに対する外部キーつき)を追加しています。

## Doctrine

author_idを追加したbooksテーブルを表すBookエンティティにはauthor_idプロパティでなくauthorプロパティを追加します。
“`php

元記事を表示

レガシーシステムに書けるテストについて

PHPカンファレンス2022で [フラットなPHPからオブジェクト指向で自動テストのあるPHPへ、そしてフレームワークへ](https://fortee.jp/phpcon-2022/proposal/ef41a5ba-4efd-4a9f-b6a8-ae456df00541) を発表した際に、「クラス化されていないレガシーシステムに対してテストを書いてリファクタしていくにはどうすればいいか?」という質問を受けました。
その場で「自分で自分のシステムに対してスクレイピングすると良い」という形で言葉で回答はしましたが、実際にどうやるのか他に例が見当たらなかったので、この場を借りて走り書きですが例を示したいと思います。

## テストしたい対象のレガシーシステム

このようなハイパーレガシーコードなシステムがあり、index.phpというURLでアクセスできるとします。

“`php

こんにちはさん
“`

## スク

元記事を表示

composer installでエラーが発生して実行できなかった(PHP Fatal error: Uncaught ArgumentCountError:)

## composer installでエラー
“`console:コンソールエラー
PHP Fatal error: Uncaught ArgumentCountError: array_merge() does not accept unknown named parameters in phar:///usr/local/Cellar/composer/1.10.9/bin/composer/src/Composer/DependencyResolver/DefaultPolicy.php:84
“`

## 解決法
下記を実行して、composerのバージョンをアップグレードする。
“`console
composer self-update –1
“`

## 参考にしたサイト
https://github.com/composer/composer/issues/9097

## エラー全文
“`console$ composer install
PHP Deprecated: Return type of Symfony\Component\Console

元記事を表示

cakePHP4でカートを作ってみる

# まえがき
PHPとSQLを勉強したいと思った私は、「…そうだ、カート作ろう!」と京都へ行くノリで手を動かし始めました。
カートを作る、にしても、言語やフレームワークはどうするか(というかそもそもどんなフレームワークがあるのか?)、どんなカートにするのか(カートのフロント側のターゲットとか、システム側の機能・要件)とか、というかまず自分にそんなの作れんのか!?(ここについては思い立ってから3ヶ月弱、今もまだ格闘中なので答えは出ていないが)とか…色々悩みはあるけれど、まずは始めてみた私だ。

:::note warn
Caution
この記事は、自分が勉強した内容に対する振り返りも兼ねてですが、何よりも「頑張ったでしょ!」という承認欲求を満たすためのものです。
間違いや意味不明な内容などもあるかもしれませんので、読み進める場合は、どうぞ広大な大地のような心でお読みください。
:::

# 作るために使う道具
– cakePHP4(PHP Ver.8.1.11)
– mySQL (Ver.8.0.30)
– 私の脳(Ver.PHPもmySQLも、ほとんどよく分かっていない版)
# 作業履

元記事を表示

livewireのpublic変数に結合文字を入れるとemit時にSafariで500エラーになる

なにこれ……
※事象の説明のみで結論が一部曖昧です。

## 前提

### livewireのデータ改ざんの検知機能について

livewireにはリクエスト間でデータが改ざんされていないかをチェックしてくれる機能があります。

詳細は↓です。(The Checksum)

https://laravel-livewire.com/docs/2.x/security#security-measures

ものすごい単純に説明すると多分こんな感じ……
1. データ送信時に、データとそのデータをハッシュ化した値を合わせて送信する
2. 通信を受け取った側は再度データをハッシュ化する
3. 1.と2.で生成されたハッシュ値を比較して同じ値なら改ざんはされていないことが保証される

ここで2つのハッシュ値に違いがあると500エラーとなります。

### 結合文字について
ここに「ホゲ」と「ホゲ」があります。
この二つは表示上は同じですが、「ゲ」の部分をUnicode表記にすると下記になります。

– ゲ %u30B2
– ゲ %u30B1%u3099

前者は単体でゲ(%u30B2)を表

元記事を表示

エンジニア転職を成功させる正しいポートフォリオの作り方

# はじめに

今回の記事では、「エンジニア転職を成功させる正しいポートフォリオの作り方」についてご紹介していきたいと思います。
実際にエンジニア転職を成功させた方の体験談や採用担当の方の話なども盛り込んだ貴重な内容になっています。
是非ご参考にしていただければと思います。

# 現在の就職活動市場

コロナ禍3年目に突入した2022年。
エンジニア転職市場は、2021年に引き続き過去最高水準の採用数が見込まれているようです。
エンジニア転職は、コロナ禍で危機感を感じ「市場価値を上げたい」「専門知識・技術を習得したい」といった上昇志向で転職を目指す方が多く、未経験で生半可な気持ちでは転職を成功させることが難しいと考えられます。
自分自身をしっかりアピールできるようにしておくことが重要で、その準備として欠かせない要素の一つがポートフォリオです。
参考:[日経XTECH](https://xtech.nikkei.com/atcl/nxt/column/18/00577/010700032/?P=2)

# ポートフォリオとは

「ポートフォリオ」とググると、「金融商品の組み合わせ」とか「

元記事を表示

さくらのレンタルサーバにPHP-sodium 拡張を入れようと思ったらてこずった話(解決編)

Laravelにて開発中のアプリケーションでJWTを使おうと思ったら、PHP-sodium が入ってないよって怒られた。

いまくいかなくて悩んでたら、@KCApps さんが助けてくれた話

## とりあえず結論

make じゃなくて gmake を使うとうまくいく

“`
# 作業用ディレクトリの作成
$ mkdir -p {~/usr/local/src,~/usr/local/php/extension}

# libsodium のダウンロードとコンパイル
$ cd ~/usr/local/src
$ wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz
$ tar xzvf libsodium-1.0.18.tar.gz
$ cd libsodium-1.0.18
$ ./configure –prefix=$HOME/usr/local
$ make && make check
$ make install

# PHP拡張のダウンロード&コンパイル
$ cd ~/

元記事を表示

【Laravel】whereとorWhereの併用で気をつけること

## はじめに
こんにちは!
バックエンドエンジニアの @kat0 です。
アドベント企画に参加するのは初めてですが、いつも書いているような記事を投稿しようと思います。

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況
組織1の管理者権限をもったユーザー(“`role“`が“`owner“`か“`admin“`)を取得したい。

## OKバージョン

組織1の管理者権限をもったユーザーのみ取得できる。

“`php
User::where(‘role’, UserRole::Owner->value)
->orWhere(‘role’, UserRole::Admin->value)
->where(‘organization_id’, 1)->get();

=> Illuminate\Database\Eloquent\Collection {#4690
all: [
App\Models\User {#4689
id: 1,
name: “山田太郎”,

元記事を表示

CakePHP DebugKitが急に表示されなくなったときの対処法

# CakePHP DebugKitが急に表示されなくなったときの対処法

[Tips] エラーメッセージが出る場合もある

:::note alert
「エラーメッセージ: SQLSTATE[HY000]: General error: 11 database disk image is malformed.」
:::

ただ、画面になにも表示されない方が多い。私のVagrant環境では毎度表示されず焦っていた。

複数環境ある場合は、環境を複製して1から構築し直すのもあり。だけど面倒なので、なんとか解決したい。

## <原因の一例>
私の場合は、Windowsの強制再起動→Vagrant/VirtualBoxが強制終了となり、ファイル破損したパターンだった。

## <とにかく画面に表示させてみる>

### ① HTMLの下部にコードを埋め込んで強引に表示させる

“`