PHP関連のことを調べてみた

PHP関連のことを調べてみた

PHPの filter_var 関数の使用方法と応用

# 基本的な使い方
filter_var 関数はPHPで提供される非常に便利な機能で、様々なタイプのデータを検証およびサニタイズするために使用されます。

“`
mixed filter_var(mixed $variable, int $filter = FILTER_DEFAULT, mixed $options = 0)
“`

* $variable : フィルタリングする変数。
* $filter : 使用するフィルタFILTER_VALIDATE_EMAIL,FILTER_VALIDATE_BOOLEAN などがあります。
* $options : フィルタに追加のオプションを指定するための連想配列またはビットフィールド。

# 応用例
## メールアドレスの検証
“`
filter_var(‘user@example.com’, FILTER_VALIDATE_EMAIL)
“`
## 真偽値の検証
“`
filter_var(‘true’, FILTER_VALIDATE_BOOLEAN)
“`
※注意点として、文字列の’yes’はtrueになり、’no’は

元記事を表示

PHP_CodeSnifferの今後

PHP_CodeSnifferは、php-cs-fixerなどと並んでPHPにおける代表的なLinterの1つです。

そのPHP_CodeSnifferに先日、`The Future of PHP_CodeSniffer`というissueが投稿されました。

https://github.com/squizlabs/PHP_CodeSniffer/issues/3932

## 何が起こっている?
簡単に言うと、PHP_CodeSnifferのリポジトリが[`squizlabs/PHP_CodeSniffer`](https://github.com/squizlabs/PHP_CodeSniffer)から[`PHPCSStandards/PHP_CodeSniffer`](https://github.com/PHPCSStandards/PHP_CodeSniffer)に変わります。
また、メンテナの体制も変更されます。

### 経緯
PHP_CodeSnifferは長年[`@gsherwood`](https://github.com/gsherwood)さん(Greg Sh

元記事を表示

フォームを操る、”Form”

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

## フォームを操る、”Form”

[Form](https://symfony.com/doc/current/components/form.html)は名前の通り、フォームを生成したり処理したりするコンポーネントです。

### インストール

“`shell
composer require symfony/form
“`

### 使い方

1. `Forms::createFormFactory()`で`FormFactory`オブジェクトを作成
2. `createBuilder()` でFormBuilderオブジェクトを作成
3. `add()`メソッドを使って項目を追加
4. `getForm()`メソッドを使って`Form`オブジェクトを作成

によって、指定したフォームの内容を受け取れる`Form`オブジェクトを扱えるようになります。
`

元記事を表示

LaravelでRequestクラスにURIを設定してテストする

## はじめに

本記事は、[All About(株式会社オールアバウト) Advent Calendar 2023](https://qiita.com/advent-calendar/2023/allabout)の11日目の投稿です。

フォームリクエスト[^1]のテストを書いているときに、リクエストに対してルーティングパラメータを含めたURIの設定がうまくできずに手こずったので書き留めておこうと思います。
[^1]: https://readouble.com/laravel/8.x/ja/validation.html

## 環境

– PHP 8.1.23
– PHPUnit 9.5.27
– Laravel 8.83.27

## やりたいこと

フォームリクエストのバリデーションルールで、特定のIDの場合はuniqueルールを無視するようにした箇所をテストで動作確認したい!から始まりました。

“`UpdateRequest.php
public function rules()
{
return [
“email” => [Rule::uni

元記事を表示

結局、PHP(Laravel)のPDF出力ライブラリはどれを使えばよいのか

# はじめに

PHPでPDFのライブラリを選定している時に、残したメモを記事化します。
かなり多くある中で、プロジェクトに合ったライブラリを探すのは時間がかかりました。
少しでも皆さんのライブラリ選定の判断材料になれば幸いです。

:::note warn
情報は2023年9月時点のものです。
:::

## 採用したもの

この中で最終的に私が選んだのは`mpdf/mpdf`のLaravelラッパーである`carlos-meneses/laravel-mpdf`です。
使用できるCSSに若干のクセがあるものの、基本的なHTMLやCSSは対応しており、ある程度の複雑なレイアウトにも対応できます。
特に便利だったのが、ページ番号や改ページ制御などを標準搭載している点です。
他にもバーコード発行機能などもある為、商品/在庫管理システムなどでも使えるのではないでしょうか。

## 各項目の情報源

– 個人的な評価
– 選定するにあたり、基準を満たしているかどうか(選定基準は上記の「採用したもの」を参照)
– サポート
– 現在も定期的なアップデートがされているか
– 利

元記事を表示

レガシーコードをなるべく良くする働きかけ

本記事は、エキサイトホールディングス Advent Calendar 2023の10日目のものになります。
リンクは[こちら](https://qiita.com/advent-calendar/2023/excite-hd)

## レガシーコードとは

>**時代遅れになってしまった古いソースコード。特に、内容が複雑で、ある開発者独自の仕様で書かれたもの。**
[コトバンクのデジタル大辞泉から引用](https://kotobank.jp/word/%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89-2133392)

要するに書いてから時が経っており、内容が複雑でわかりにくいコードを全般的に指すのかな…

別の言葉では…

>**レガシーコードとは、単にテストのないコードである。**
[レガシーコード改善ガイドから引用](https://www.shoeisha.co.jp/book/detail/9784798116839)

なるほど、テストコードがなければレガシコードだと…

元記事を表示

Auth0 + Laravelで簡単Passkey実装

こんにちは!
社内でドキドキしながら「久しぶりにアドベントカレンダーするよ!」と言ったら、速攻で25日のカレンダーが埋まって一安心している株式会社Fusicの櫻川です。

この記事は[Fusic Advent Calendar 2023](https://qiita.com/advent-calendar/2023/fusic)の10日目の記事です。
この後もがっつりエンジニアからエンジニアではない人まで、様々な記事が上がってくるのでお楽しみ!

昨今の話題はChatGPTをはじめとする生成系AIでしょうか?
今回はChatGPTによって隠れてしまったけど、とても大事なPasskeyの実装について書いてみようと思います。

## Passkeyとは

すごくざっくり行ってしまうと生体認証などを活用してパスワードレス認証方式です。
ちょっと前に流行った、WebAuthnの改善版だと思ってください。

最近だと[GitHubがPasskeyに対応](https://github.blog/jp/2023-10-12-passkeys-are-generally-available/)したの

元記事を表示

Vonage × LaravelでSMS送信&パスワードなし認証を実装してみた

# はじめに

Vonage は CPaaS(Communications Platform as a Service)のプロバイダーで、SMS送信や音声通話などのコミュニケーション機能をAPI連携で実装できるサービスを提供されています。

本記事では Vonage から提供されている API を用いて SMS送信とパスワードなし認証を実装してみました。

# 開発環境

Vonage では様々なプログラミング言語の SDK が用意されています。

https://developer.vonage.com/ja/tools

今回は PHP のフレームワークである Laravel を用いて実装します。

* PHP v8.2
* Laravel v10.x

:::note info
Vonage API を用いた実装方法を確認することが目的であるため、本記事では画面を作成せずに Artisan コマンドを作成し、簡略化を図っております。
:::

Laravel で Vonage を使用するためのパッケージとして、Vonage のサイトで紹介されている `vonage/vonage-

元記事を表示

12/08にリリースされたFrankenPHP触ってみた

# FrankenPHPってなに?
Go言語で書かれたモダンなPHPアプリケーションサーバーだそうです。
サイトはこちら👇
https://frankenphp.dev/docs/

![スクリーンショット 2023-12-08 12.12.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14268/9daeaeaa-3cc5-6732-7bbb-ee8f94920972.png)

[ドキュメントサイト](https://frankenphp.dev/docs/)も作成されていました。

AdventCalendarの締め切りも近づいてたので、ちょっと触ってみるかということで触ってみました。

# インストール
インストールというよりは、Dockerで動かしてみることができるようです。

“`bash
$ docker run -v $PWD:/app/public \
-p 80:80 -p 443:443 \
dunglas/frankenphp
“`

Go言語で書かれ

元記事を表示

【Laravel】paginate() + distinct() で総件数が重複レコード分多くなる問題を回避(おまけ:PRの議論がアツい)

この記事は、[Qiita AdventCalendar2023 ラクスパートナーズ](https://qiita.com/advent-calendar/2023/rakus-partners)10日目の記事です。
この記事では、私が業務で遭遇したLaravel のpaginate() と distinct() を組み合わせたコードが、「**取得したレコードは重複削除してあるのに、総件数(ページ数)は重複削除されていない**という結果を表示した」問題を解決する方法を紹介します。

取得したレコード28, 1ページあたり10件なのに…
![1AFF45FA-A70C-4328-8457-66D821068687.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2846236/d0936c66-3076-3e25-fe19-3307d61e25b3.png)
(ちなみに重複削除しないと196レコードで計算が合う)

また、この記事を書くに当たって[Laravel へ今回の方法を実装した有志のプルリクエスト

元記事を表示

なぜあの日の私は「メソッドは常に静的に定義した方が良い」と思ってしまったのか

OOP(オブジェクト指向)言語の実践経験者各位におかれましてはとんでもないタイトルに映るかと思います。
実際自分自身でもゾッとします。主語が大きめなのもゾッとしますね。大丈夫かな。

でも、恥ずかしい話、以前は本気で思ってました。

**いついかなるとき[^1]** でも、 OOPに於いては**動的(dynamic)なメソッドより静的(static)なメソッドのほうが様々な面で優れている**って。

[^1]:タイトルの思考はここが大前提になっているためご注意ください。終盤に述べている通り、staticメソッドは適切に運用するタイミング・処理系は確実に存在します

…似た思考の方は、そのプロダクトの危険信号が思考に反映されているかもしれません。

# 誤った思考をたどるサンプルコード[^4]

[^4]:個人的な都合上、PHP 8.1.9で可能な記法で表記します。また、こちらも個人的な思想として、getterに相当するメソッドにget接頭辞は付けません。

“`php: staticメソッドを使いたくなってしまったクラスの例

元記事を表示

PHPでLINEログインを実装する方法

本記事は、[めんどい太郎の Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mendoitarou_first_calendar) 10日目の記事です。

# はじめに

この記事は初心者が書いています。

皆さんはLINE使ってますか?

LINEは日本では主要な連絡ツールで多くの人が使っています。

そこで、WebでLINEログインを実装する方法を紹介します。

:::note alert
この記事で紹介するコードは不完全であり、テストのためにセキュリティ面を考慮してない実装があります。
:::

LINEのドキュメントは非常に見やすいので、この記事を見るよりもいいかもしれません。

https://developers.line.biz/ja/docs/line-login/integrate-line-login/

# チャネルの作成

まずは[LINE Developper Console](https://developers.line.biz/console/)にアクセスします。

アクセスすると

元記事を表示

画像やJSをロード、”AssetMapper”

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

## 画像やJSをロード、”AssetMapper”

[AssetMapper](https://symfony.com/components/AssetMapper)はアセットのマッピングと、公開領域へのファイルの生成を行うコンポーネントです。
Symfony 6.3から導入された新しいコンポーネントですが、実はSymfonyでのフロントエンドの扱いが大きく変わるコンポーネントとなっており、Symfony公式ドキュメントでは[Webpack Encore](https://symfony.com/doc/current/frontend/encore/index.html)ではなく、AssetMapperを推奨しています。

### インストール

“`shell
composer require symfony/asset-mapper
“`

asset

元記事を表示

LaravelでのMVCを理解する

## はじめに
Laravel は何ですか??
Laravel は、MVC Web アプリケーションを開発するために PHP で書かれた無料のオープンソース Web アプリケーション フレームワークです。Laravel は、拡張可能な PHP ベースの Web サイトや Web アプリケーションを大規模に作成するのに役立つ使いやすい Web フレームワークです。
## MVC ARCHITECTURE
Laravel フレームワークは、Web アプリを作成するための MVC アーキテクチャ パターンを促進します。 このパターンは、スケーラブルで保守可能な Web アプリを構築する方法を指定する一連のルールを指定します。
Laravel MVC パターンは、開発者が非構造化コードに秩序と一貫性をもたらすのに役立ちます。 MVC アプローチにより、小規模および大規模な Web アプリケーションの開発も容易になります。
## MVCの理解
M = 「Model(モデル)」
V = 「View(ビュー)」
C = 「Controller(コントローラ)」  をそれぞれ意味しています。
![im

元記事を表示

Log4php 使用方法(自分用、詳しくは公式サイトへ!!)

# はじめに

現在、自身が使用しているプロダクトにlog4phpを導入しようとしています

しかし、使い方がわからなかったので調べてみることに。

※極限まで突き詰めるつもりはありません!!

# 使い方

1. まずモノをダウンロード

[Apache log4php – Download – Apache log4php](https://logging.apache.org/log4php/download.html)

composer使っても行けるみたいです。

2. ファイルをプロダクトの任意ディレクトリ配下に解凍展開
3. プロパティの設定
4. 設定ファイルの読み込み
5. プロダクトのファイル内にlog4phpの処理を差し込んで使用

※番号1、2 は割愛します。

## 3 プロパティの設定

設定ファイルの記載方法について(自分はここに苦戦しました)

log4phpを動かすうえで、いくつか値を設定する必要があります。

今回はわかり易そうな iniファイル形式を採用

以下の要件でログを出力します。

– ファイルに追

元記事を表示

Drupal 10.2の開発者向けアップデート

[Drupal Advent Calendar 2023](https://qiita.com/advent-calendar/2023/drupal) の6日目です。

前日の投稿ではウミ菊池さんから[非エンジニア視点での Drupal 10.2 変更点ピックアップ](https://www.studio-umi.jp/blog/7/793)が紹介されていましたので、本記事ではDrupal 10.2に含まれる開発者向けのアップデート(の中から私が理解できたもの)をいくつか紹介しようと思います。執筆時点の最新バージョンである[Drupal 10.2.0-rc1](https://www.drupal.org/project/drupal/releases/10.2.0-rc1のリリースノート)を参照しています。

## 新機能

### プラグインタイプで、Annotationsの代わりにAttributesが利用できるように

Drupalでは、ブロックやViewsで利用されているプラグインシステムでDoctrine Annotationsが活用されています。PHP 8から言語ネイテ

元記事を表示

初めてのチーム開発で Best Award を受賞した話

# 目次
[1.はじめに](#1-はじめに)
[2.メンバー構成や役割について](#2-メンバー構成や役割について)
[3.チーム開発 week が始まるまでに行ったこと](#3-チーム開発weekが始まるまでに行ったこと)
[4.追加設定](#4-追加設定)
[5.ガントチャートによる進捗管理](#5-ガントチャートによる進捗管理)
[6.タスク管理機能の実装](#6-タスク管理機能の実装)
[7.デイリポ 機能の紹介](#7-デイリポ 機能の紹介)
[8.振り返り](#8-振り返り)

# 1. はじめに
私は2023年10月より、内定直結型エンジニア学習プログラム「アプレンティス」に2期生として参加しています。

[【働きながら学べる】エンジニア実習 アプレンティス](https://apprentice.jp/)

その中で初めて取り組んだチーム開発が先日発表会を迎え、なんと、プロのエンジニアの方々が選ぶ **Best Award を受賞**することができました!!

一連の開発過程と、完成したアプリケーションをご紹介しつつ、良かった点、反省点を振り返り、学びを整理しようと思い

元記事を表示

PHP nullable な型、union 型について

# 本記事を書こうと思った動機
本記事では、
* **nullable な型**(データ型の前に **`?`** を付与)
* **union 型**(**`|`** で複数のデータ型を結合)

について紹介する。

ある時、有名なライブラリのコードを解析していて、上記 2 つを使用した部分をよく見かけた。私のように「ライブラリを提供する側ではなく、使用する側」の立場が多い人にとっては、使う場面が少なく新鮮なコードに見えた。**この機会を逃したら、おそらく勉強しないだろうと思った**ので、その意味をはっきりさせておきたかった。

# nullable な型
引数や戻り値の型宣言で、nullable 指定ができる。PHP マニュアルによると、
> PHP 7.0.x から PHP 7.1.x への移行

時の新機能のようだ。**データ型の前にクエスチョンマーク (`?`) を付与することで、指定したデータ型に加え、null も渡せるようになる**。下記に、引数に (`?`) を付与しない場合、付与する場合、戻り値に (`?`) を付与する場合を示す。
### 引数に (`?`) を付与し

元記事を表示

symfonyでvalidationのメッセージを日本語化したメモ

https://symfony.com/doc/current/validation/translations.html

基本は ↑ こちらに沿って進めればOK

https://github.com/symfony/validator/tree/7.0/Resources/translations

symfony/translation で配置されるファイルは ↑ こちら

https://symfony.com/doc/current/translation.html#translation-resource-file-names-and-locations

↑ こちらにあるとおり、 validators.ja.xlf を translations/ ディレクトリにコピーします

ただ、各リンクのとおりに進めても、invalidのメッセージは英語のままでした

ファイル名の形式が `translation_domain.言語.xlf` となっているみたいで、
validator.yaml の translation_domain と合わせる必要があります

“`diff

元記事を表示

Laravel 9 から Google Drive API で共有ドライブを操作する

:::note
Laravel Advent Calendar 2023 9日目の記事です🎄
:::

## はじめに
みなさん、お久しぶりです!リバネス開発チームのトミー(@tomyf)です!

今回は Google Drive の共有ドライブをWebサービスから管理したいという要望があったので、動かす所まで検証しました。

システムの概要としては、複数のGoogleドキュメントをまとめて、冊子にする工程を補助するアプリケーションとなっています。
APIを使って共有ドライブを操作する目的は、フォルダやファイルの構成と名称を執筆者の裁量に任せず、システム側で制御して管理しやすくするためです。

サービスアカウントの認証情報をJSONファイルで管理している記事が多数見受けられますが、今回は Heroku でホスティングすることを想定しているため、JSONファイルではなく環境変数で管理するようにしています。

## 環境
– Docker v24.0.6
– Laravel v9.25.1
– PHP v8.0.2
– google/apiclient v2.15.1

## Google

元記事を表示

OTHERカテゴリの最新記事