- 0.1. Stripeを使った決済の払い戻しの実装
- 0.2. どんなライブラリを選べるのか?
- 0.3. PHP におけるデータベース接続作業前のif文による安全性チェック
- 0.4. PHPにおける単体テストとシステムテストのベストプラクティスな組み合わせ
- 0.5. 【PHP8.4】Deprecatedを公式に書けるようになる
- 0.6. PHPの配列の初期化方法
- 0.7. StripeApiを使った支払い機能の追加
- 0.8. ChromeOSを入れたMacBookAirでXampp環境を構築した
- 0.9. Laravelでcacheの概要を掴む
- 0.10. Laravel用のComposerパッケージを自作して公開してみた
- 0.11. Laravel Sail導入手順
- 1. 手順
Stripeを使った決済の払い戻しの実装
前回、Stripe APIを使用した支払い機能の実装方法を紹介しました。今回は、支払いの取り消し(払い戻し)機能を実装したので、その手順とコードをこちらで記載しておこうと思います。
# 今回実施する環境
バージョン: PHP 8.2.9
エディター: vsCode# stripe_paymentsテーブルを作成
払い戻し機能の実装に際しては、まず支払い記録を保存するテーブルを作成する必要があります。このテーブルは、Stripeで行われた支払いに関する情報を保存し、後の取り消し処理にも役立ちます。そこで、まずはstripe_paymentsテーブルを作成し、支払い記録を保存する仕組みを作ります。
“`
php artisan make:migration create_payments_table –create=payments
“`
“`php
どんなライブラリを選べるのか?
# はじめに
最近、会社でどのアドミンパネルを選択するかというテーマが出ました。
これまでメンテナンスが停止されたアドミンパネルライブラリを使用し、さまざまな厄介な問題に直面した経験があるため、将来を見据えた適切なライブラリ選定の重要性を感じています。
ライブラリを選定する際に考慮すべきポイントについて、いくつか役立つ基準を整理してみました。
#### 参考:laravel admin panelの種類
– https://nova.laravel.com/
– https://filamentphp.com/
– https://orchid.software/
– https://moonshine-laravel.com/
– https://lean-admin.dev/
– https://voyager.devdojo.com/
– https://backpackforlaravel.com/
– https://adminlte.io/# 本論
## アドミンパネルを使用する理由
アドミンパネルは、ビジネスを始めるタイミングで迅速に成果物を提示できるた
PHP におけるデータベース接続作業前のif文による安全性チェック
# 背景
仕事でPHPを使った業務システムを開発している。
フレームワークを用いたデータベース操作のコード。
# code
“`php:API use CodeIgniter3
if (!empty($has_recode_id) && !empty($has_recode_id->recode_id)) {
$this->db->trans_rollback();
return [‘status’ => false, ‘error_code’ => Error_list::_CODE_E_FAILURE];
// 最初のチェック:$has_recode_id が null でないことを確認. クエリ結果が存在するかを確認.
// 2番目のチェック:$has_recode_id->recode_id が存在し、null でないことを確認. 値が存在するかを確認.
“`
# なぜ 二つのif文でチェックするのか?
– 最初の !empty() で、クエリ結果自体が存在するかを確認
– 2番目の !empty() で、実際の recode_id の値が存在するかを確認
– このよう
PHPにおける単体テストとシステムテストのベストプラクティスな組み合わせ
PHPプロジェクトにおける単体テスト(UT)とシステムテスト(ST)のベストプラクティスな組み合わせについて解説します。
## PHPUnit+Codeception
– **概要:**
– PHPUnitは単体テストに特化したフレームワークであり、Codeceptionは機能テストやシステムテスト、受け入れテストを統合的にサポートします
– **単体テスト(UT):**
– PHPUnitを使用して、クラスやメソッド単位でのテストを実施します
– **システムテスト(ST):**
– Codeceptionを活用し、ユーザーの操作シナリオに基づいたテストを行います
– **利点:**
– 両者は互換性が高く、テストの統一管理が容易です## PHPUnit+Behat
– **概要:**
– PHPUnitで単体テストを行い、Behatで受け入れテストやシステムテストを実施する組み合わせです
– **単体テスト(UT):**
– PHPUnitを用いて、各ユニットの動作確認を行います
– **システムテスト(ST):**
– Behat
【PHP8.4】Deprecatedを公式に書けるようになる
普段ドキュメントに`@deprecated`って書いてるんですが、これは公式ではなく[phpDocumentor](https://docs.phpdoc.org/guide/references/phpdoc/tags/deprecated.html#deprecated)の方言に過ぎません。
しかしまあ普及率も高いし公式でも使いたいよねってことと、あと標準関数のE_DEPRECATEDと動きを合わせたいということで、PHP8.4でアトリビュートとして実装されることになりました。以下は[PHP RFC: #[\Deprecated] Attribute](https://wiki.php.net/rfc/deprecated_attribute)の紹介です。
# #[\Deprecated] Attribute
## Introduction
PHPの内部関数やクラス定数には非推奨マークを設定することができます。
これによってそれらを使うとE_DEPRECATEDの警告が発生し、Reflectionから利用することができます。
しかし、ユーザランドからは同じことができません
PHPの配列の初期化方法
# $data の初期化
## 1. 空の配列として初期化し、後から要素を追加する
“`php:sample001.php
$data = []; // 空の配列として初期化
$data[‘id’] = ‘123’;
$data[‘tel’] = ‘075-000-1234’;
$data[‘name’] = ‘hoge taro’;
“`
空の配列を作成し、必要なキーと値を個別に追加する。
コードを見て直感的に処理が理解できるが、
初期化とデータの追加が別々に行われるため、
コードがやや冗長になる場合がある。## 2. 短縮構文を使用して初期化時に要素を設定する
PHP 5.4 以降では、array() の代わりに [] を使用して配列を初期化することができる。この方法では、初期化と同時に要素を設定できるため、コードが簡潔になる。
“`php:sample002.php
$data = [
‘id’ => ‘123’,
‘tel’ => ‘075-000-1234’,
‘name’ => ‘hoge taro’
];
“`
イメージ的に
“`ph
StripeApiを使った支払い機能の追加
# 今回は、Laravelを使ってStripeの決済機能を実装する方法を記載します
決済のApiを作成したいため、フロントは実装しません。
私の状況としまして未エンジニアであり色々なapiを作成し学習しています。# こちらの記事を参考にしました
# 今回実施する環境
バージョン: PHP 8.2.9
エディター: vsCode
後ほど、composer require stripe/stripe-php のインストールを行います# 1.Stripeアカウントの作成とAPIキーの取得
こちらのstripeにてサインインしアカウントを作成します
https://stripe.com/ja-usアカウント作成後、ダッシュボードの方で画面上部にある開発者をクリック->Apiキーをクリックします
![スクリーンショット 2024-11-10 15.36.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931703/0e64b6
ChromeOSを入れたMacBookAirでXampp環境を構築した
ChromeOSでは以下から簡単にLinux環境が構築できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931560/dd470f3d-b8e9-597a-9a08-e966a0c3c1b2.png)Xamppは以下のリンクからダウンロードした。
https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/Xamppをインストールして、Apacheを起動して、以下のURLでダッシュボードが表示した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931560/073677c9-e9bd-5a39-b173-4cbbbab19d09.png)
Laravelでcacheの概要を掴む
:::note
今回はデータベースキャッシュドライバを使用してcacheの概要をつかみます。
:::# 背景
業務でLaravelを使っていてキャッシュについて触れることがあったので、今回キャッシュについて勉強します。こちらで検証しました。
https://github.com/yamatai12/cache-app
# キャッシュ(cache)とは
取得したデータを一時的に保存する仕組みです。
同じデータに対するその後のリクエストでそこから取得することで素早いレスポンスを実現できます。キャッシュされたデータは通常、[Memcached](https://memcached.org/)や[Redis](https://redis.io/)といった非常に高速なデータストアに保存されます。
# キャッシュの設定
設定ファイルは`config/cache.php`です。
アプリケーション全体でデフォルトのキャッシュストアを指定できます。Laravelのキャッシュストア
– Memcached
– Redis
– DynamoDB
– リレーショナルデータベース等
–
Laravel用のComposerパッケージを自作して公開してみた
## やりたかっとこと
LaravelのEloquent Builderで、LIKE検索を以下のように記述できるクラスを作った。
“`php:UserController.php
$words = [‘山田’, ‘岐阜市’];
$comulns = [‘name’, ‘company.address’];
User::whereLike($columns, $words)->get(); // 岐阜市で働く山田さんを取得
“`これをいろんなプロジェクトで使いたいので、パッケージ化して`composer require`で利用できるようにしたい。
## 結果
ここにパッケージをリリースして、
https://github.com/oor30/laravel-where-like
以下コマンドで利用可能に。
“`shell
composer require kazuki/laravel-where-like
“`## パッケージのロジック
Laravel標準機能のMixinを利用して、`Illuminate\Database\Eloquent\Builder
Laravel Sail導入手順
環境 mac
Laravel sailとは
Laravel のデフォルトの Docker 開発環境と対話するための軽量のコマンドライン インターフェイス
崩すとlaravelをdockerで開発が簡単にできるツール
手順
環境 mac
1. dockerを入れる
※Macのチップでダウンロードするものが変わってきます。
2. プロジェクトの作成
ターミナルを起動して
作成したい作業ディレクトリ配下でコマンド実行
**`curl -s “https://laravel.build/example-app” | bash`**
example-appの部分はプロジェクト名になるので好きな名前を入れましょう(この記事ではexample-appで進めます)
※時間かかりますのでまったり待ちましょう
途中でパスワードを求
PHP,Laravelの基礎 ~文法、構文~
## はじめに
こんにちは、未経験からエンジニア転職を目指しているものです。
オンラインスクールで本格的に学習して6ヶ月目に入りました。PHP,Laravelを学習しポートフォリオを作成中です。ポートフォリオ作成が順調に進むように、PHP,Laravelの疑問点について整理しようと思います。今回は、Laravelの文法に登場する ::, ->, =>, ‘ ‘, ” ” の記号や構文についてまとめてみました。
## :: (ダブルコロン)
::は、クラスやスタティックメソッド・定数にアクセスするときに使います。クラス名とそのメソッドや定数をつなぐ役割を持っています。### 具体例:
“`php
// クラス定数の例
class MathHelper {
const PI = 3.14;
}// クラス定数を参照する
echo MathHelper::PI; // 出力: 3.14
“`### Laravelの例:
“`php
Route::get(‘/’, function () {
return view(‘welcome’);
});
“`
PHPにパターンマッチングはないが… 作ればいいよ
PHPではいわゆるパターンマッチングはできません。
PHP 8.0で導入された[`match`式]は「ちゃんとした」パターンマッチじゃないんだって[RFC]に書いてあったよ。
うーん… 困った。そうだね、ないなら作ろう。
“`php
$result = match (ing($subject, matcher: $_, matched: $m)) {
$_(is: ‘ほげ’) => ‘これはほげだよ’,
$_(class: DateTime::class) => “これはDateTimeだよ”,
$_([$_->a]) => “要素1 マッチしたよ! {$m->a}”,
$_([$_->a, $_->b]) => “要素2 マッチしたよ! {$m->a} {$m->b}”,
$_([$_->a, $_->b, $_->c]) => “要素3 マッチしたよ! {$m->a}, {$m->b}, {$m->c}”,
$_([‘config’ => [‘password’ => $_->pass]]) => “password = {$
【PHP】事前準備 PHP の開発環境の構築について
まず初めにこの記事は、PHPを使用する人向けの記事となります。
そのために、まず事前準備としてPHPの開発環境を構築していこうと思います。**使用する環境**
* OS:Winodws11
* XAMPP
* Visual Studio Code
* コマンドプロンプト
* composer
* Laravel
* Node.js**手順**
1. 「XAMPP」をインストールし、ダウンロードをクリック
2. 「C:\」に解凍
XAMPP インストール先はこちら
3. 「XAMPP.exe」を起動し、「Apache」を起動
4. PHP のコードを書くために、「Visual Studio Code」をインストール
Visual Studio Code ダウンロード先はこちら
4. 「composer」をインストー
Ubuntu 20.04 複数install PHP切り替えにおける処理
今回Ubuntu 20.04において、標準インストールのPHP8.3から旧バージョン PHP7.3を複数インストールし、バージョン切り替え、とその後 Webサーバ Apache2上でも完全に切り替える処置の覚書を投稿します。
まずは切り替えたいばーじょんの PHP(今回は 7.3)を必要なパッケージ共インストールする。
“`
例:
apt install php7.3 php7.3-fpm
apt install php7.3-curl php7.3-gd php7.3-mbstring php7.3-mysql php7.3-pgsql php7.3-xml
インストール後
update-alternatives –config php
上記コマンドより、選択
There are 2 choices for the alternative php (providing /usr/bin/php).Selection Path Priority Status
—————————————-
PHPのGDライブラリを用いて文字列を描画する その2
# はじめに
本稿は、[PHPのGDライブラリを用いて文字列を描画する](https://qiita.com/kk_outlaw/items/d52657fdccf7ff093f19)の続きとなっています。
前回書ききれなかった、文字列を斜めに描画する方法について説明します。# 描画領域の座標系について
このサンプルコードは前回説明したものと同じになりますが、imagettfbbox()にテキストを回転させる角度を度数法で指定します。
“`php
$bounding_box = imagettfbbox(
$font_size,
$text_angle, //第2引数で角度を指定する
$font_file_name,
$text
//PHP8.0では引数にarray $options = []が追加されている
);
“`# 開始位置を指定して文字列を描画する
ここからが曲者になります。まず、文字列を描画するコードは前回のものを踏襲します。
“`php
imagettftext(
$image, //あらかじめ生成した空の
PHPのGDライブラリを用いて文字列を描画する
# はじめに
本稿では、PHPを用いてサーバサイドで文字列を含む画像を生成し、クライアントに出力する方法について説明します。# 文字列の描画手順
1. フォント(.ttfファイル。後述)、フォントのサイズ、描画する文字列の角度を指定する
1. 描画領域の座標系を取得する(詳しくは後述)
1. 文字列を描画する
1. 生成した画像を出力する## フォントの指定方法について
PHPのimagettfbbox()関数、imagettftext()関数のフォントに指定方法には癖があり、環境によって異なるようです。
そこで、PHPスクリプトのパスをもとにした絶対パスで指定するのが無難なようです。
“`php
$font_file_name = realpath(‘./’) . ‘/NotoSerifJP-Regular.ttf’;
“`
ここで“`realpath(‘./’)“`がスクリプトの絶対パスとなり、スクリプトと同じディレクトリに.ttfファイルが存在する場合は上記のようになります。## 描画領域の座標系について
まず、実際に文字列を描画する前にimagettfb
PHPのパターンマッチで遊んでみた
## はじめに
先日、Ruby の強力なパターンマッチを試して楽しみました。その直後にたまたま久し振りに PHP に触る機会があったので PHP でもパターンマッチができないか調査してみました。
https://qiita.com/mnishiguchi/items/53b55deae8e033562a55
2020 年の PHP 8.0 に[match 式](https://www.php.net/manual/ja/control-structures.match.php)が導入されていました。PHP でもパターンマッチができます!
https://php.watch/versions/8.0
https://php.watch/versions/8.0/match-expression
https://www.php.net/manual/ja/control-structures.match.php
試してみます。
## PHP の`match` 式とは
公式ドキュメントに以下の通り記されています。
> match 式は、値の一致をチェックした結果に基づいて
PHPで権限周りの構築にビット演算を使用する
ビット単位のAND演算を使用して権限チェックを行うことは、権限管理の一般的かつ効率的な方法です。
この方法には以下のような利点があります:1. 効率性:
複数の権限を1つの整数値で表現できるため、データベースの保存や処理が効率的です。2. 柔軟性:
新しい権限を追加する際に、既存のシステムに大きな変更を加えることなく拡張できます。3. 高速な演算:
ビット演算は非常に高速で、大量の権限チェックを行う場合でもパフォーマンスが良好です。実装例:
“`php
// 権限の定義
define(‘PERMISSION_READ’, 0x0001); // 1
define(‘PERMISSION_WRITE’, 0x0002); // 2
define(‘PERMISSION_DELETE’, 0x0004); // 4
define(‘PERMISSION_ADMIN’, 0x0008); // 8// ユーザーの権限(例:読み取りと書き込み権限を持っている)
$userPermissions = PERMISSION_READ | P
CakePHP 5でコマンドを作成する方法:HelloCommandの実装
CakePHP 5でコマンドを作成するには、`Command`クラスを継承したカスタムコマンドを作成し、`bin/cake`コマンドで実行できるようにします。以下に、CakePHP 5でカスタムコマンドを作成する手順を示します。
### 手順
1. **コマンドの作成**
コマンドファイルは、`src/Command`ディレクトリに作成します。例として、「HelloCommand」というシンプルなコマンドを作成してみます。
“`bash
src/Command/HelloCommand.php
“`2. **コマンドクラスの作成**
以下のように、`HelloCommand`クラスを作成します。“`php