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

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

【PHP】VS Codeで関数の一覧を表示させておく

## やりたいこと
関数が多くて探したい関数がすぐに見つからない!

phpの関数の一覧をVS Codeの左側に出しておいて
クリックしたらその関数に飛ぶようにしましょう。

## 拡張機能「PHP Intelephense」をインストール

[PHP Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client
) をインストール

![スクリーンショット 2024-08-29 122106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3686263/97a3c049-aa16-7005-3f18-c131d98c5cd0.png)

## VS Codeの設定を調整

VS Codeの設定画面で「outline」と検索。
以下の画像でチェックが付いているもの以外はチェックを外す。

このチェックを外さないといらないデータが一覧に混ざってきます。

![ima

元記事を表示

Laravel 学習 (バリデーション)

## バリデーション

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/52b612e9-0a99-df61-54bb-67c43fa2b8f3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/f6fc3ac1-56ee-5a8e-fa9f-b3d9c9fd435e.png)

送信ボタンを押した際にバリデーションチェックをし、問題があればエラーメッセージを表示させます。

“` php:\routes\web.php
Route::get(‘/hello’,’App\Http\Controllers\HelloController@index’);

Route::post(‘/hello’,’App\Http\Controllers\HelloController@post’);
“`

“` php:\app\Http\Controllers

元記事を表示

更新のお知らせ: ServBay 1.4.2、新機能と改善点!

ServBayバージョン1.4.2のリリースをお知らせします!
一歩先を行く体験をしたいですか?私たちの[Discordコミュニティ](https://talk.servbay.com)に参加してください。

## 新機能
**グローバル検索**: ホストとドメインの検索をサポートするグローバル検索機能を追加し、ユーザーの効率を向上させ、必要なリソースを迅速に見つけることができます。
**PHP設定UI**: 直感的なPHP言語設定インターフェースを提供し、開発者が言語設定を簡単に行えるようにし、設定時間を短縮します。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vi0rclkqdvsvvw6wf1xz.png)

## 製品の改善
**ナビゲーションメニューの再設計**: ナビゲーションメニューを完全に再設計し、レイアウトを最適化して全体的なユーザー体験を向上させ、機能へのアクセスをより便利にしました。
**ホストページの最適化**: ホスト管理ページを部分的に再構築し、

元記事を表示

データの受け渡し練習のためECサイト作ってみた

## 記事の概要
エンジニア未経験からの挑戦ということで企業様へアピールするためのポートフォリオを作成してみました。
作成手順と機能、工夫したところ、課題点を書き出してみようと思います。

### プロフィール
20代後半 男性
ITは全くの未経験(前職は営業)
就労移行支援にて0からプログラミングを学ぶ。
**作成期間は1ヶ月くらい**

## 目的
* JavascriptとPHPを使いつつDBとの連携も行えるよう経験を積む
* 今の自分のレベル感を企業に見ていただく
* 素のJs、PHPでどこまで書けるかチャレンジ

# スペック
**言語**
Javascript (Vanilla Js)
PHP 8.0.19

**DBMS**
MySQL Ver 8.0.29

**開発環境**
Windows 11 Pro
IIS (Version 10.0.22621.2860)

## 完成画面
(圧縮上手くできませんでした。。。)
![ECサイト.gif](https://qiita-image-store.s3.ap-north

元記事を表示

Laravelでオニオンアーキテクチャを使ってみた

## はじめに
少しだけクリーンアーキテクチャやオニオンアーキテクチャについて感覚が掴めた気がするので記事にしておきます。
ご指摘点あれば遠慮なくお願いいたします。
構成ですがPHPとLaravelを使用、ディレクトリ構成はonion architectureで構築していきます。

### 実際の構成
以下ディレクトリ構成になります。
また色んなディレクトリ構成が存在するのでこれが正解ではないです。
呼び出し方とかおさえておけば色々対応できると思います。

“`
├── app
│ ├── Http
│ │ ├──Controllers
│ │ │ ├── Api
├── onion
│ ├── Controller
│ ├── Driver
│ ├── Entity
│ └── UseCase
“`

流れとしては
– routes/api.php
– Http/Controllers
– onion/Controllers
– onion/UseCase
– onion/Driver(Repository)
– onion/Entity

元記事を表示

robots.txtを取得しクロール拒否されていないかチェック②

# 概要

前回は、[robots.txtを取得する処理](https://qiita.com/ishi720/items/d985bb711744ce9864fb)を作成しました。
今回は、`robots.txt`からクロール拒否されていないかチェックする処理を作成したいと思います。

# robots.txtの構成

まずは、サンプルとしてQiitaのrobots.txtを拝借しました。
Qiitaのrobots.txtは以下のような構成になっています。

“`text:robots.txt
# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
User-agent: *
Disallow: /*/edit$
Disallow: /api/*
Disallow: /graphql$
Disallow: /policies/td-optout$
Disallow: /search
Disallow: *.md
Disallow: */i

元記事を表示

Laravel側でのIPアドレスによるアクセス制御

# IPアドレスによるアクセス制限とは
業務系Webアプリケーション構築時には、「特定のIPアドレスからのアクセスのみ許容したい」といった要件はありがちかと思います。
通常、インフラ側で制御すれば良い話ではあり、AWSであれば下記の方法で設定可能です。
– ALBのリスナールール
– ネットワークACL
– セキュリティグループ

# Webアプリケーション側で実装する必要性
前項の通り、AWSで設定することにより、簡単に実施できます。
しかし、下記のケースではどうでしょうか。
– ユーザーが二種類ある(user, admin)
– adminの中でも権限が分かれている
– adminの特定の権限のみIPアドレスによるアクセス制限を実施したい

「adminのみIPアドレスを制限したい」ということであれば、ALBのリスナールールでパス指定することにより、なんとかなりそうです。
厄介なのが、「adminの特定の権限のみ」という部分です。ログイン認証後しか判定できないため、Webアプリケーション側で実施する必要があります。

# 実装方法
MiddleWareを使って実装していきます。

元記事を表示

PHPでテストコードを書いてみる!単体・結合テスト、AAAについても解説!

# テストコードとは?

プログラムの動作を検証するために書かれるコードのことです!

# テストコードのメリット

– バグ検知
– コードに潜むバグの検知を早期に発見できます
– 関数の動作を表現できる
– テストコード自体が関数の使用方法を示すドキュメントになります
– リファクタリングの安全性確保
– 他メンバーがコードを修正する際にもテストが通ることで品質が保証されます
– テストコードが無いとどこまで影響範囲があるのか確認しなければなりません

# テストの種類

– 単体(ユニット)テスト
– 関数単位で正しく動作するか確認します
– 例: MVCフレームワークのモデルの関数のテスト
– 結合(インテグレーション)テスト
– 単体テストで確認した関数を組み合わせて連携してテストを行います
– 例: MVCフレームワークのコントローラーのアクションのテスト
– システムテスト
– システム全体が要件通りに動作するかを確認します
– アプリケーションがほぼ完成した段階で実施されます

# A

元記事を表示

セキュリティ対策について(レスポンスヘッダー等)

# ウェブセキュリティの強化:ヘッダーとCookieの設定方法

## はじめに
Webアプリケーションのセキュリティは、常に進化する脅威に対抗するためには不可欠です。
本記事では、サーバー応答のセキュリティを向上させるためのヘッダーの設定方法と、
Cookieの安全な扱い方について解説します。
サンプルコードはPHPになります。
またこれから扱う内容は検証ツールを開いてネットワークタブのレスポンスヘッダーの話しになります。
![スクリーンショット 2024-08-26 14.38.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586109/d692eeea-1cbd-7c85-edab-a57d1501ab18.png)

## セキュリティヘッダーの設定

### X-Content-Type-Options

このヘッダーを`nosniff`に設定することで、ブラウザはMIMEタイプのスニッフィングを無効にし、指定された`Content-Type`のみを扱うようになります。これは、悪意

元記事を表示

CakePHP4.xのアプリをCakePHP5にアップグレードする とりあえずアップグレード編

## はじめに
PHPのバージョンやらMySQLのバージョンやらをあげるためにCakePHPも5に上げようと思い、手順を記録しておこうと思いました

### PHPとMySQLのバージョンを上げる
CakePHP5ではPHP8.1以上が必要です
今回は

https://qiita.com/scarym/items/6b5e813f0972896780fc

の通り、MAMP7で

* PHP8.3.9
* MySQL8.0.35

という環境で動かします

### アップグレード・ツールを使う

https://book.cakephp.org/5/ja/appendices/5-0-upgrade-guide.html

を参考にアップグレードツールをインストールします。
今回は現在動いているアプリを仮に「my_app_name」とします
まずは「my_app_name」に移動して
“`
git clone https://github.com/cakephp/upgrade
“`
my_app_nameの下に「upgrade」が出来るのでそちらに移動
“`
cd upgra

元記事を表示

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を使用してサーバー側が決済**
上記記

元記事を表示

OTHERカテゴリの最新記事