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

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

Laravel初心者が掲示板作る【Laravel 8.x】

https://manablog.org/laravel_bulletin_board/

こちらの記事を参考にしてLaravel初心者がつまづいた所をまとめてみる。

# バージョン

Laravel version
8.83.27

PHP version
7.4.33

MuSQL version
5.7.39

MAMP version
6.9

# 進捗

現在、
投稿記事を表示するためのコントローラーをつくっていく
の章の
投稿一覧の表示ページを作成する
でつまづいている。

## 2024.8.1

### Seederが動かない
“`terminal:ターミナル
$XXX bbc % php artisan db:seed
Database seeding completed successfully.
“`
とりあえず、`php artisan db:seed`も
`php artisan migrate`みたいに
マイグレーションファイルやシーダーファイルも
一括で読んでくれるものだと勘違い。
実際はデフォルトだと`DatabaseSeeder`クラスを実行

元記事を表示

PHPのjson_decode()はデコードに失敗した場合nullを返す

調べればすぐだったのに、勘違いにより1時間くらい無駄にしたので備忘のために残します。
悔しい。

## サクッと理解したい人

参考記事:https://www.php.net/manual/ja/function.json-decode.php

:::note info
json のデコードに失敗したり エンコードされたデータがネストの最大値を超えているなどの場合、null を返します。
:::

てっきりエラーが表示されるのかと思ってました。
デコードに失敗した時はエラーではなくnullが返ります。

## デコードってなに

(デコードとエンコードいつもわからなくなっちゃう)

デコードとは、JSONをオブジェクトに変換することです。
逆にエンコードは値をJSON形式に変換することです。

## 今回失敗したパターン

今回、デコードするために渡したJSONが**ダブルクォーテーションで囲われていない**値があり、デコードに失敗しnullとなっていました。

“`PHP:失敗例

元記事を表示

Laravel 11で外部API呼び出しメソッドをMock化する方法

# はじめに
Laravelで外部APIと連携するアプリケーションを開発する際、外部APIの準備が整っていなかったり、APIの利用制限があるためなるべく通信したくない、などの理由で、ローカル環境での開発やテスト実行時に実際に外部APIを呼び出したくない場合があると思います。

そこで今回は、Laravelで外部API呼び出し処理をMock化する方法を紹介します。
この方法を使うことで、外部APIのレスポンスを擬似的に再現し、開発やテストをスムーズに進めることができます。

# 前提条件
– PHP 8.3.7
– Laravel Framework 11.14.0

# 実装手順
## APIサービスの作成
まずは、実際に外部APIにリクエストを送信するサービスクラスを作成します。
今回は呼び出し元でステータスコードを利用できるように、JsonResponse型で返していますが、配列など任意の型で実装できます。
その場合は、Mockクラスのメソッドの戻り値も合わせて変更してください。

“` php
// app/Services/ApiService.php

元記事を表示

Authより前に処理を差し込みたい

# Authより前に処理を差し込みたい
Laravel10の開発でAuthよりも前に処理を差し込みたい場合、どうすればいいのか書いていきます。
先に結論を言っておくと公式ドキュメントの「ミドルウェアの順序」の部分に従ってKernel.phpに$middlewarePriorityを定義します。
https://readouble.com/laravel/10.x/ja/middleware.html

“`
protected $middlewarePriority = [
\Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\

元記事を表示

もしPHPが使われなくなったら、どのバックエンド言語を選ぶか?

私はベテランのバックエンド開発者として、PHPは私のキャリアにおいて重要な役割を果たしてきました。しかし、技術の世界は日々変化しており、常に新しい挑戦に備える必要があります。では、もしPHPが今日突然消滅したら、どのバックエンド言語を選ぶでしょうか?以下が私の鋭い見解です。

## 1. Golang

まず、私は間違いなくGolang(Go言語)を選びます。なぜなら、Golangは性能が優れているだけでなく、開発体験も非常に良いからです。PHPと比べて、Golangの並行処理能力はまさに雲泥の差です。Golangのコードを書くことは、面倒な設定や終わりのないデバッグがない、楽しい旅のようです。

Golangの標準ライブラリは非常に強力で、ほぼすべての開発ニーズを満たすことができます。また、Golangの”Bring your own”アプローチは、フレームワークに縛られるのが嫌な開発者にとってまさに理想的です。各構造体のために個別のファイルを作成する必要はなく、エラーハンドリングもより直接的で透明です。要するに、Golangはコードそのものに集中できるようにしてくれます。

##

元記事を表示

【Laravel11】最低限のログ設計について

## はじめに
システムのログってめちゃくちゃ大事。
システムのバグの早期発見からの修正だったり、システムで何が起きているか可視化できる。

そんなある日、あるプロジェクトのフレームワーク設計を行うことがあった。
ただ単に環境を用意して渡すと、書き方がそれぞれ異なる可能性もあるため、先に準備した方がいいなと思った時の出来事である。

**ログ周りはできるだけ処理を共通にしてメンバーにおろそう**

特にLaravelは書き方に自由性があるため、それぞれ異なる書き方ができやすいフレームワーク(だと個人的には思っている)。

荒削りな部分もあるが、全体のログ設計として最低限を網羅できるように設計したことを忘れないように備忘録としてメモしておく。

## ログ実装

+ **前提**
前提としてデフォルトのLaravelのフローを崩さず、ログの出力、書き出しの部分のみをオーバライドしたい。
また、標準出力も開発効率向上のため、対応する。

+ **ログ関数**
まずログを出力するServiceクラスを作成。

**基本ログ項目**
・IPアドレス
・URL

元記事を表示

Laravel11で管理画面を作るのにFilamentをインストールしてみる

管理画面の作成に、以前は`Laravel-Admin`を使ったことがあるのですが、更新が止まっているようなので新たに`Filament`を使ってみようと思います!
まずはFlamentの導入するための備忘録になります

# 環境
– PHP8.2
– Laravel11
– Laravel Sailで環境構築、Dockerで起動中

環境構築に関しては、こちらを参考にしてください!

https://qiita.com/curacao/items/892109e579c377b9b4b8

# Filamentとは?
簡単にまとめると
– 無料のLaravelの管理パネルツール
– ドキュメントが充実していて、コミュニティも活発
– シンプルなので手軽に導入をできる
– Tailwind cssベース
– 頻繁にアップデートが行われている

という優れもの!
公式のDemoもあるので、是非見てみてください!
[Filament公式DEMO](https://demo.filamentphp.com/)
[Filament公式](https://filamentphp.com/)

#

元記事を表示

Laravel11の開発環境をDockerで構築する方法

久々にLaravelを使う(前回使ったのは6系だったな?)ので、備忘録を残します!
今回はDockerを使って環境を構築してみたいと思います!

# 環境
– WSL2
– Laravelは11系を使用
– PHPは8.2系にアップデート済み
– DockerはDocker Desktop for Windowsを利用

PHPが7系で8系にアップデートしたい方はこちらを参考にしてください

https://qiita.com/curacao/items/b4d4e645489294fb1f57

# Laravelプロジェクトの作成
まずはcomposerを使ってLaravelプロジェクトの作成を行います。
開発を行うディレクトリに移動して次のコマンドを実行します。
“`
composer create-project laravel/laravel hoge-app
“`
※WSL環境で開発を行う場合、プロジェクト作成の場所は結構大事になってきます! **推奨は`~/`以下です!**
理由に関してはこちらの記事を参照

https://qiita.com/curacao/ite

元記事を表示

OpenID Connectの実装について

## はじめに
この記事ではOpenID Connect認証の流れと、PHPを用いたアクセストークンおよびIDトークンの取得、公開鍵の検証方法について説明します。
OpenID Connectは、OAuth 2.0をベースにした認証プロトコルであり、
ユーザーが認証情報を直接提供することなく、第三者アプリケーションに安全にアクセス権を委任できる仕組みです。

## OpenID Connect基本的な処理の流れ
※Service Aは開発中のサイト
※Identity Providerは認証を行うサービス(例:Google、Facebookなど)

“`mermaid
sequenceDiagram
participant User
participant Service A
participant Identity Provider

User->>Service A: ログインボタンをクリック
Service A->>Identity Provider: 認証リクエストを送信
Identity Provider->

元記事を表示

【Stripe決済】laravel + JavaScriptでStripeクレジットカード決済をやってみた

## はじめに
決済機能を実装するにあたり、StripeAPIを使用して実装することになった。

今回の記事はstripeAPIに関しての決済備忘録になる。
忘れないようにメモしとく。

## ざっくりな環境
+ Docker
+ Laravel11
+ php8.3
+ MySQL8.0
+ JQuery
+ HTML
+ CSS
+ Bootstrap

## 流れ
まず流れから把握しておく。

+ **フロント側でPaymentMethodIDを作成する**
Stripe(多分他の決済機能も一緒)はクレジットカード情報を送信したり、取得したりするのはセキュリティ的に良くないため、カード情報を直接保存せず、トークン化された情報を使って、セキュリティを確保するらしい。これにより、PCI DSS(Payment Card Industry Data Security Standard)に準拠した安全な方法でカード情報を管理ができるようになるみたいやな。
ここでまあまあハマった。

+ **フロント側で作成したPaymentMethodIDを使用してサーバー側が決済**
上記記

元記事を表示

Perlプログラミング入門:初心者のための15ステップガイド

# はじめに

こんにちは!今日はPerlプログラミング言語について学んでいきましょう。Perlは強力でフレキシブルな言語で、特にテキスト処理が得意です。この記事では、15の章に分けてPerlの基礎を丁寧に解説していきます。各章にはサンプルコードも用意しましたので、ぜひ実際に試してみてくださいね。

## 第1章:Perlの基本

Perlは「実用的抽出・報告言語」(Practical Extraction and Report Language)の略称です。1987年にラリー・ウォールによって開発されました。

“`perl
#!/usr/bin/perl
use strict;
use warnings;

print “こんにちは、Perlの世界へようこそ!\n”;
“`

## 第2章:変数とデータ型

Perlには3つの主要な変数型があります:スカラー($)、配列(@)、ハッシュ(%)。

“`perl
my $name = “太郎”;
my @fruits = (“りんご”, “バナナ”, “オレンジ”);
my %ages = (“太郎” => 25, “花子” =

元記事を表示

Laravel/PHPの日付で起こり得るバグ4択!何個解けますか?

## あるある!日付計算がうまく行かないバグ

さっそくですが、このコードの中のバグが分かりますか?
“`
public function searchBookingsInWeek(CarbonInterface $start)
{
return BookingModel::query()
->whereBetween(‘date’, [$start->startOfWeek(), $start->endOfWeek()]);
}
“`
### 答え

**※1問目だけはネタバレ対策させていただきます。**
次からはスクロールの調整でご協力お願いします。バグ解決を検索している方になるべく不便なく届くため次から答えを隠しません。

クリックで正解を表示

正解は、Carbonのオブジェクトはミュータブルなせいで探してる期間が実質$start->endOfWeek()から$start->endOfWeek()になっちゃいます。

修正としては簡単

元記事を表示

CSVのパースで空文字とnullを区別する

## 背景
業務でCSV取込機能を作っていて、なめてかかっていたら詰まったので備忘録として残します

## 課題
以下のようなCSVを取り込む必要があり、
“`csvs
“dummy”,””,,dummy
“`
結果として、
“`json
[
“dummy”,
“”,
null,
“dummy”,
]
“`
を得たいとのこと
え…CSVはそもそも文字列しか扱えないものだと思ってた…`null`も考慮せなあかんの…

## PHPで頑張る
PHPには`fgetcsv`と`str_getcsv`があるけど、

https://www.php.net/manual/ja/function.fgetcsv.php

https://www.php.net/manual/ja/function.str-getcsv.php

どっちも以下のような結果になる
“`php
str_getcsv(‘”dummy”,””,,dummy’);
/*
[
“dummy”,
“”,
“”,
“dummy”,
]
*/
“`
公式のオプション見て色々試したものの、全然上手くいかな

元記事を表示

Laravel10とJavaScriptのFetchAPIでいいね機能を実装する【非同期処理】

## 本記事の内容
記事に対するいいね機能の実装方法です。認証ライブラリであるBreezeがインストールされている前提となります。また、fetchAPIを使用した非同期処理の実装をします。

Breezeインストールとその他の準備

“`
composer require laravel/breeze –dev
“`

“`
php artisan breeze:install blade
“`

“`
npm install && npm run build
“`

### 使用する技術
・Laravel10.*
・MySQL
・JavaScript
・CSS
・Font Awesome
・Breeze
・Vite(Laravel Breezeを使用している人はデフォルトで用意されています)

### アプリ画面はこちら

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486141/

元記事を表示

クソ雑魚のワイ、Symfonyのコードリーディングしてみた②

前回の記事に続きまして、Symfonyのコードリーディングを続けていきます。
以下は前回の記事です。

https://qiita.com/JonyTask/items/ce96c4afafd409d2b4ef

## Requestクラスについて
本記事で主に進めていく箇所は、以下のパスです。
./src/Symfony/Component/HttpFoundation/Request.php

### クロージャについて
このクラスのコードを読んでいくと、おそらくcreateRequestFromFacoryという関数が重要であることが分かります。

複数の関数において返されるインスタンスはこの静的関数を用いて作成されているようです。
この関数は以下のコードです。

“`
private static function createRequestFromFactory(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], arr

元記事を表示

Laravel Bladeテンプレートの基本とディレクティブの活用法

## はじめに
Bladeテンプレートエンジンは、Laravelでのフロントエンド開発において非常に重要な役割を果たします。Bladeは、PHPコードとHTMLを簡潔かつ効率的に混在させるための強力なツールであり、テンプレートの再利用性やコードの可読性を大幅に向上させます。

### Bladeテンプレートの重要性
1. テンプレートの継承によるコードの再利用性
Bladeの最大の強みの一つは、テンプレートの継承機能です。例えば、ウェブサイトの全ページに共通するヘッダーやフッター、ナビゲーションバーなどを一つのレイアウトファイルにまとめ、各ページの個別の内容だけを別ファイルで管理することができます。これにより、一貫性の確保と開発効率の向上に繋がります。

2. Bladeディレクティブによる簡潔なコード記述
Bladeは、@if、@foreach、@extends、@include などの独自ディレクティブを提供しています。これにより、複雑なPHPロジックをテンプレートに埋め込む必要がなく、コードが簡潔で理解しやすくなります。

3. セキュリティの向上
Bladeテンプレートエン

元記事を表示

OpenAI Assistants APIをPHPで実装する

– PHP 8.2.12
– “guzzlehttp/guzzle”: “^7.9”

OpenAI Assistants APIをPHPにて実装してみます。

HTTPクライアントはguzzleを使用します。Laravelでのシステムにて利用することを想定しています。

APIキーは、**OPENAI_API_KEY**という名前で環境変数に入れてあります。**phpdotenv**を使ってます。

“`bash
$ composer require guzzlehttp/guzzle
$ composer require vlucas/phpdotenv
“`

### Assistantの作成とファイルのアップロード

Assistantの作成とファイルのアップロードはダッシュボードから行います。

![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638071/ef0dd51d-cc88-e487-af8a-a5507048cb9a.jpeg)

![スライド2.JPG](htt

元記事を表示

OpenAI ChatGPT APIをPHPで実装する

– PHP 8.2.12
– “guzzlehttp/guzzle”: “^7.9”

OpenAI APIをPHPにて実装してみます。

HTTPクライアントはguzzleを使用します。Laravelでのシステムにて利用することを想定しています。

APIキーは、**OPENAI_API_KEY**という名前で環境変数に入れてあります。**phpdotenv**を使ってます。

“`bash
$ composer require guzzlehttp/guzzle
$ composer require vlucas/phpdotenv
“`

### 通常パターン

“`php:chatgpt1.php
load(

元記事を表示

JavaとPHPの文法の違い

## はじめに
JavaとPHPは、どちらも広く使われているプログラミング言語ですが、その文法には多くの違いがあります。本記事では、JavaとPHPの基本的な文法の違いを中心に解説します。これから両言語を学ぶ方や、どちらか一方の言語に慣れている方に役立つ内容となっています。

## 1. 変数の宣言と型指定

### Java
Javaでは、変数を宣言する際に必ずデータ型を指定します。これは、Javaが静的型付け言語であるためです。

“`java
int num = 10;
String text = “Hello, World!”;
“`

### PHP
一方、PHPでは変数にデータ型を明示的に指定する必要はありません。PHPは動的型付け言語であり、変数の型は実行時に決定されます。

“`php
$num = 10;
$text = “Hello, World!”;
“`

## 2. クラスとオブジェクトの定義

### Java
Javaは純粋なオブジェクト指向言語であり、すべてのコードはクラスの中に配置されます。以下は、クラスとオブジェクトの基本的な定義です。

`

元記事を表示

What is a PHP Developer?

In internet improvement, a PHP developer plays an essential position. PHP, a popular server-facet scripting language, is the spine of many dynamic websites and web programs. If you have ever wondered what a PHP developer does, what talents are required, and the way to become one, this text is for you.

What is PHP?
PHP (PHP) is an open-source server-aspect scripting language designed commonly for net improvement. It is embedded inside HTML and is used to manage dynamic content, databases, consul

元記事を表示

OTHERカテゴリの最新記事