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

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

【Laravel】ScribeでAPIドキュメントを作成

Laravel Advent Calendar 2022 9日目の記事です。
Laravel+ScribeでAPIドキュメントを作成する方法をまとめました。

https://qiita.com/advent-calendar/2022/laravel

## はじめに
小規模ですが、フロント・バックエンドのチームに分かれて開発をしています。
フロント側の人から「APIの仕様がまとまっていたら助かる」という声をもらい、APIのドキュメントについて調べたところ、今回のScribeを見つけ実装しました。
本記事では、途中つまったところに重点を置いてまとめます。
## 環境
* PHP 8.1.5
* Laravel 9
* Laravel Sail
## 使用したライブラリ
https://scribe.knuckles.wtf/
## 実装手順
こちらの記事に分かりやすく書かれてましたので、参考にさせていただきました。
こちらをご参照ください。

https://aimstogeek.hatenablog.com/entry/2021/07/19/080000#Scribe%E3%81%

元記事を表示

AR.jsを使って恐竜を家に呼んでみた

# はじめに
こんにちは!今回初参加させていただきます。
[CYBIRD Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cybird)、9日目担当の@ayany0_zzZです!:hugging:
前回は@moffunnyaさんの「Terraformを使った環境構築入門(AWS)」でした。

初めての投稿なので、お手柔らかにお願いいたします…!

# 自己紹介
私は、2022年にサイバードに新卒入社いたしました。
ドキドキワクワクの研修期間を経て、現在は:rose:[イケメン王子~美女と野獣の最後の恋~](https://ikemen.cybird.ne.jp/title/prince/original/):rose:のクライアント兼サーバーエンジニアとして開発に携わらせていただいております!
ちいかわとポケモンとゲームが大好きなひよっこエンジニアです:hatching_chick::dizzy:

最近ではポケモン最新作「ポケットモンスターバイオレット」で、色違い集めに励んでいます。
目標は、

ValueObjectについてまとめてみた

案件の中で、Value Objectを使用している箇所がいくつかあったのでまとめました。

**Value Object(バリューオブジェクト) とは、**

– 値をクラスにすること
– 値を変更したくなったら、バリューオブジェクトごと置き換えること
– どの箇所からでも再利用できること(バリューオブジェクト内のデータを使うので、データの値を担保できる)

と自分は認識しています。

例として、Userモデルを挙げます。
| Userモデル |
| ———- |
| id |
| name |
| tel |

`name`はその人の名前を表すものなので、バリューオブジェクトにする必要はないと思います。
下記あたりが、バリューオブジェクトにしやすいものと思います。

– CRUDするときに、変な値で登録させたくないもの
– typeが存在するもの(性別や、血液型など)

例として、Userモデルの中の、`tel`をバリューオブジェクトにしてみます。

“`php

Auth0を使ってSSOの流れを確認してみた

## はじめに
この記事は[OPENLOGI Advent Calendar 2022](https://qiita.com/advent-calendar/2022/openlogi)の9日目の記事です。

業務と全く関係ないのですが、今回は個人的に気になっていたSSOの具体的な流れについて手元で環境を作り処理を追っていきたいと思います。
[Auth0](https://auth0.com/jp)や[SSO](https://auth0.com/blog/jp-sso-login-key-benefits-and-implementation/)、またその他利用しているツール類の説明は、詳しく解説されてる記事がありますので割愛させていただきます。

## 概要
SSOの分かりやすいフロー図が[Auth0 blog](https://auth0.com/blog/jp-sso-login-key-benefits-and-implementation/)にありますので、Auth0を使ったSSOの1〜13までの流れを確認します。
![typical-sso.png](https://q

PHPで書いたブラックジャックのコードをレビューしてもらって、リファクタリングしたこと3選♠️

# はじめに
下記の記事執筆していたとき、ブラックジャックのソースコードについて、以下の課題がありました。

> 機能としては完成させて、やり切った思いはあります。ただ、もっとこうしたら良くなるという、自分では気付かないことが多々あるはず…という状態なので、第三者にコードレビューをしてもらう機会を得ようと思います。
>

https://qiita.com/ryamate/items/f77efb0888bb025e5f5b

今回、コードレビューしてもらう機会を得たので、レビューに基づいてリファクタリングしました。

ちなみに、PHPで作ったコンソール画面で操作するブラックジャックゲームのソースコードです。
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/8a00bf37-8060-b3b8-e124-080b427009ba.gif)

## 自己紹介

– 私は公務員からWebエンジニアに転向して、 2 年目に入ったところです。
– 1 年目は、研修 3 ヶ月、

HTMLテンプレートを扱う、”Twig Bundle”

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

## 最初に
[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

今秋 四半世紀続いた番組の終了が悲しすぎて、Vue.js で iPod shuffle をつくったお話

今秋、東京で 24年半続いた番組が終焉を迎えた。
その番組は…

| [J-WAVE]GROOVE LINE |
|:–|
| **● 番組名:** GROOVE LINE |
| **● 放送局:** J-WAVE(81.3 MHz) |
| **● 放送期間:** 1998年4月〜2022年9月 |

J-WAVE らしくない番組でありながら、Weekday の夕方という仕事終わりのサラリーマンの 1日の最後の活力を奮い立たせることだっただろう。
GROOVE LINE が終わったということは、もう **「おとなのアンパンマン」** が聴けないなんて!と思い、過去に [どがらじ](https://dogaradi.com) で保管していたアーカイブを編集して、私専用のストリーミング版 iPod sh

C#で書いたライブラリをPHPやGoから呼び出す

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

.NET 7より、ソースコードを中間言語(CIL)ではなく、ネイティブコードへコンパイルするNative AOTがサポートされました。
そのNative AOTに関連して、.NET系言語**以外**からも呼び出し可能な[ネイティブライブラリが作成できる](https://learn.microsoft.com/ja-jp/dotnet/core/deploying/native-aot/#build-native-libraries)ようになっています。
他言語から.NETの、例えばC#で書いたライブラリを利用できるというのは魅力的ですので、早速試してみました。

## C#でネイティブライブラリを作成する

まずはC#のクラスライブラリプロジェクトを作成します。

“`shell-session
$ dotnet new classlib -o NativeLibrary
“`

作成されたプロ

【Laravel】検索機能を実装する

# 実装する検索機能一覧

このCRUDアプリでは検索結果をページネーション(分割表示機能)で
表示しています。
検索機能を実装するために必要な知識をまずはおさらいしますが
検索機能の実装方法についてすぐに確認したい場合は
次のリンク先にお進みください

1. [キーワード検索](#キーワード検索)
1. [上限値と下限値を設定しリレーション先を検索する](#上限値と下限値を設定しリレーション先を検索する)

![スクリーンショット 2022-12-03 21.40.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2765288/e75b1ed6-285f-83fc-830f-1ce4d29ddb3a.png)

### Laravelで検索機能を実装するために必要な知識

Laravelには独自機能が存在し、`少ないコードでSQLを実行`したり、
多数の検索結果を分割して表示する`ページネーション`と呼ばれる
技術があります

### LaravelでDBを操作するコード

#### Eloq

【PHP8.2】PHP8.2がリリースされたので新機能全部やる

[PHP8.2](https://qiita.com/rana_kualu/items/64bd73ad3d314a1cccdc) / [PHP8.1](https://qiita.com/rana_kualu/items/e350b8ff80f929626eb9) / [PHP8.0](https://qiita.com/rana_kualu/items/c110cb244c3ee38c6859)

2022/12/08に[PHP8.2.0がリリースされました](https://www.php.net/releases/8.2/ja.php)。
大きな新機能については、PHP8.0以降公開されるようになった[ランディングページ](https://www.php.net/releases/8.2/)で見ることができます。

ここでは、概要だけではなく[UPGRADING](https://github.com/php/php-src/blob/php-8.2.0/UPGRADING)に載っている変更点を全部見て回ることにします。

# Backward Incompatible C

Laravel-adminで管理するテーブルを追加する

ユーザーに対してPOPUPを表示させる機能を実装しています。
ユーザーグループIDを追加することで通知するユーザを分けることを可能にしています。
現状はダイレクトにSQLを入力するスタイルですが、Laravel-adminを使用してIDの登録、編集、削除を容易にできるようにします。
やること
– Laravel-admin用のコントローラーを追加
– ルーティングの追加
– フォーム画面の編集
以前、Laravel-adminの導入はすでに行なっているため、作業自体は簡単です。
### Laravel-admin用のコントローラーを追加
[公式サイト](https://laravel-admin.org/docs/en/quick-start)を参考に作業を行いましたが、QuickStartに書かれている内容が古いディレクトリ構造になっているため、以下のコマンドで実行。
“`php
php artisan admin:make CollectionController –model=App\\Models\\Collection
“`
※Laravel-adminをインストールし

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

名前の通り

①SQLの誤字脱字の可能性が高いため、誤字脱字を確認する
②SQL周辺の間違えがないか確認することが重要。

PHP エラーや警告が出る処理を書いても処理が止まらないようにする

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の8日目の記事です
:::

# 概要

– PHPの式にて値が得ることのできるものの場合、エラーになる処理を書いても処理が止まらない様にする方法をまとめる。

# 注意

– エラーで止まってしまう処理に本記事で紹介する内容を記載しても根本解決にはならないので注意すること。

# 方法

– 当該処理の前にエラー制御演算子`@`を設置する。

# 具体例

– 下記のような処理があったとする。

“`php

DockerでのLAMP環境構築手順(Amazon Linux 2/PHP8.1(Laravel9)) ⑧Apache の設定ファイルの追加(全8回)

# はじめに

かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
![スクリーンショット 2022-11-30 23.31.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/930bcd24-38e9-316e-bebd-cef83aea5924.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/ry

SymfonyでDBを扱うセット、”ORM Pack”

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

## 最初に
[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

Laravel8(API) × Vue.js で中間テーブルにPOSTする

現在お知らせ機能を実装しており、「次回から表示しない」ボタンを配置しています。ユーザーごとにどのお知らせを非表示にするかを管理するために、中間テーブルを作成しています。
現状はINSERTで中間テーブルにレコードを追加しています。
Vue.jsでaxiosを使って、APIからお知らせの情報を取得&表示まで実装済。
今回はAPIを完成することをゴールとします。

Laravel8(APIモード)
Vue2(SPA)

### 実装手順
– 中間テーブルのモデルを作成&関連付け
– UserControllerで中間テーブルへPOSTする内容を記述
– ルーティングの設定(api.php)
– PostmanでPOSTリクエスト送信
– Vue.jsからのリクエスト→APIとの疎通を確認
### 中間テーブルのモデルを作成&関連付け

多対多の中間(ピボット)テーブルのモデルを作成する場合、`using`メソッドを呼び出すこと。
Notificationsモデル
“`php
public function users() {
return $this->belongsTo

DoctrineとEloquent比較大全8: リレーション先テーブルのデータを利用

day8の今日はday7で定義したリレーション先テーブルのデータを利用する方法を見ていきます。

## Doctrine

“`php
getRepository(Book::class)->find(1);
echo $book1->getAuthor()->getName(); // Authorのnameを見ることができる

$author1 = $entityManager->getRepository(A

continue文は結局続けるの?続けないの??

# はじめに
はじめまして!
NE株式会社 開発統括部のはやしまきです。

エンジニアのみなさん、タイトルを見てこいつ何言ってんだとなっていることでしょう。

すんごい今更なのですが、
コードを読んでいる際、continue文を見ると
「continueって結局続けるんだっけ…?」とよくわからなくなるときがあります。

ここはスキップだよな…と思いながらも心配になり、リファレンスを開くというのを何度もやってます。リファレンスをブクマしておいた方がいいですね。お守りです(?)

意味をもぐもぐ咀嚼し、納得して、もう開かなくていいように記事に残します。
一緒にもぐもぐできたら幸いです!

この記事は、[NE Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ne) 8日目の記事です。

# なぜ勝手に混乱してるのか

– 英単語の”continue”は「継続する」の意味
– for文などのループ構造で用いられた際、スキップの指示する

おいおいおい、継続するんかやめるんかどっちや…
どこまでをやって、どこからはやらない

FeatureTestとユニットテストの使い分けについて

## LaravelでTDDしていますか?

Laravelのプロジェクトを新規作成すると、tests/Feature, tests/Unitディレクトリがついてきます。
tests/Featureの下にはFeatureテスト、tests/Unitの下にはユニットテストを書いてほしそうな構成です。

では、あなたのユニットテストが継承しているTestCaseクラスは `Tests\TestCase` でしょうか、それとも `PHPUnit\Framework\TestCase` でしょうか?
もちろん、 `Tests\TestCase` 自体が `PHPUnit\Framework\TestCase` を継承しているので、 `extends Tests\TestCase` なテストであっても `PHPUnit\Framework\TestCase` を継承はしています。

Tests\TestCaseはsetUp()でLaravelのapplicationを起動しています。
Laravelのapplicationが起動されていることによって、テスト時もFacade等の便利な機能が使える

【PHP】データベースの型にdecimal(1,0)を使用する

# 初めに
:::note warn
この記事は初学者を対象に書かれています
:::
最近Laravleの改修案件に参画しているのですが、

新しくテーブル、カラムを追加する機会があったので

その時に疑問に思ったこと、学んだことを共有します。

## decimalとは
`decimal`とは固定小数点数型のことで、記述方法か以下のようになります

“`
decimal(M,D)
“`
>M ->桁数の合計 (精度)
D ->小数点以下の桁数 (スケール)

最大桁数 (M) は `65`
デフォルトは `10`
小数部の最大桁数 (D) は `30`
デフォルトは `0`

例えば、`decimal(5,3)`の場合、

`12.345`のように

5桁で小数点以下3桁の数字になります

## データベース設計においての有効性
データベース設計において、データの型はとても重要です。

例えば以下のようなデータベース設計はどうでしょうか?

usersテーブル
| Column | Type | Option |
|:-:|:-:|:-:|
| id | int | P