- 0.1. 生PHPでAPIルーティング, リフレクションで動的にクラスメソッド実行
- 0.2. 【Laravel】ジョブとキューの基本
- 0.3. LaravelのEloquentでtoArrayを使う場合はタイムゾーン設定が反映されないことがある
- 0.4. php artisan migrateでエラー(SQLSTATE[HY000] [2002] Connection refused)
- 0.5. 【Laravel】デプロイの際やっていおいた方が良いこと
- 0.6. 再実行のやり方とGotoとエラー処理
- 0.7. 【Laravel】アクセサ/ミューテタの基本
- 0.8. 【EC-CUBE】 プロジェクトをpublic_html配下にインストールする方法
- 0.9. エンジニアインターン2日目
- 0.10. laravel-permissionを利用したロールベースアクセス制御(RBAC)を実装する
- 0.11. 【Laravel】API仕様書と実装のテストにツールとしてSpectatorを検討してみた
- 0.12. phpでコードカバレッジを取得しながら手動テストをする方法
- 0.13. PHP 虎の巻(あんちょこ)
- 0.14. エンジニアインターン1日目
- 0.15. 可変長引数(PHP)
- 0.16. Laravel Sanctumを使ってSPA認証を実装する
- 0.17. 初心者必見!Laravelを使うならCollectionを活用しよう
- 0.18. PHP 繰り返し処理記述のコツ
- 1. はじめに
- 2. 繰り返し処理のコツ
- 3. 例
生PHPでAPIルーティング, リフレクションで動的にクラスメソッド実行
# 生PHPで、APIルーティング
要件
`api/class/method`でのAPIリクエストを想定。
リフレクションで動的に実行する。“`php index.php
/api/index.php
// var_dump($script_name[‘REQUEST_URI’]); => /api/class/method// URI`api/hoge/fuga?aa=1`から、`hoge/fuga`を取得
// デリミタは、URIの`/`と被らないように指定
$delimiter = ‘~’;
$pattern = $delimiter .dirname($_SERVER[“SCRIPT_NAME”]).’/([\w]*)/([\w]*)’ . $delimiter;
$result = preg_match($pattern, $_SERVER[“REQUEST_URI”], $matches);// 正規表現より、`Index Out Of Bounds`は起きな
【Laravel】ジョブとキューの基本
## キューとは
ジョブを貯めておく箱。基本的には先入先出法(FIFO)で処理を実行する。
キューの候補として、MySQLといったRDBやRedisのようなNoSQL、Amazon SQSが候補として挙げられる。
## ジョブとは
キューに格納する処理そのものこと。ユーザが応答を待たず、バックグラウンドプロセスで動かしたいもの。
## 環境
Laravel 9.35.0
PHP 8.1.2
## 事前準備
今回は、データベースのテーブルをキューとして検証してみます。
以下のコマンドでキュー用のテーブルを作成します。
“`shell
$ php artisan queue:table
$ php artisan migrate
“`.envファイルの以下の箇所をsyncからdatabaseに変更します。
“`php
QUEUE_CONNECTION=database
“`## サンプル実装
例えば、ユーザ作成処理の後処理としてメールで完了通知を送るケースがあったとします。
まず、以下のコマンドでジョブクラスを作成します。
“`shell
$
LaravelのEloquentでtoArrayを使う場合はタイムゾーン設定が反映されないことがある
# 結論
Eloquentのattributeが、config/app.phpのtimezoneの設定が反映されずにUTCで取得されることがあります。
この条件は下記の通りです。
– toArrayまたはtoJson呼び出し時
– $castsプロパティにてdatetimeへのキャストが設定されているattribute必要に応じてModelクラスのオーバーライドなど対策を行いましょう。
# 環境など
Laravel9系# 理由
$castsにてdatetimeへキャストを設定したattributeをjsonserializeする際、CarbonのtoJsonメソッドが呼ばれます。
このメソッドは必ずUTCの値を返すため、結果としてEloquentのtoArrayやtoJsonメソッドの結果もUTCになってしまいます。CarbonのtoJsonを呼び出している箇所: \Illuminate\Database\Eloquent\Concerns\HasAttributes::serializeDate
# 対策例
\Illuminate\Database
php artisan migrateでエラー(SQLSTATE[HY000] [2002] Connection refused)
こんにちは、しほです。
Laravelを使って簡単なアプリ作成に挑戦中なのですが、migrationで早速詰まったので備忘録を残します。
# 環境
– Docker 20.10.14
– PHP 8.0.27
– Laravel 6.20.44# 状況
– 以下のサイトを元にDocker + Laravelの環境構築
https://www.torat.jp/laravel-docker-lemp/
– php artisan make:model モデル名 -mcでモデルとコントローラとマイグレーションファイルを作る
– マイグレーションファイルを編集してカラムを追加する
– php artisan migarateでエラー### エラー文
“`
SQLSTATE[HY000] [2002] Connection refused
“`# やったこと
① 以下のサイトを参考に、.envのDB_HOSTをdockerのDBのコンテナ名(docker-compose.ymlの「container_name」で設定している名前)に変更
https://qiita.com/
【Laravel】デプロイの際やっていおいた方が良いこと
## オートローダー最適化
本番環境へデプロイする場合、アプリケーションの自動ロードを高速化するクラスマップを作成して、Composerが、指定されたクラスのファイルを素早く見つけ、ロードできるようにします。
“`shell
$ composer install –optimize-autoloader –no-dev
“`もしくはcomposer.jsonの中身において
“`php
{
“config”: {
“optimize-autoloader”: true
}
}
“`と設定すれば
“`shell
$ composer install –no-dev
“`で済みます。
上記コマンドを実行すると、return arrayの箇所に変更が入り、クラスマップを作成してくれます。
“`php:vendor/composer/autoload_classmap.php
再実行のやり方とGotoとエラー処理
仕事で開発やっていて、phpの仕様について誤解していたので反省がてら。
とりあえずコード。
下は、try内容がエラーになった時、3回は再実行し
それ以降は対応できなかったとアラートを出して終了するという処理だ。“`test.php
//変数宣言と初期化
$i = 0;
repeat:
try {
//try内の内容
echo (12/0);} catch ( Exception $e ) {
//エラーしたら行われる処理
//4回以下なら上に戻る
if ($i <= 2){ $i++; print($i.'回目の再実行をします'); goto repeat; } else { print('3回再実行をしましたが、対応できませんでした'); exit; } } finally { //エラーしてもしなくても実行される処理のはず //エラー処理の場合は、exitされるはずなので、
【Laravel】アクセサ/ミューテタの基本
# アクセサとは
アクセサは、Eloquentのプロパティにアクセスが合った時に値を変換する処理のこと
# ミューテタとは
ミューテタは、Eloquentのプロパティを設定するときに、その値を変換する処理のこと。
# どういう時に便利か
例えば、ユーザ追加APIがあったとします。その機能では、ユーザテーブルにメールアドレスを登録するとき、暗号化して登録する必要があるとします。
その場合、メールアドレスを暗号化する処理をコントローラもしくはサービスに実装するかと思います。復号処理についても同様です。
しかし、仮に友達追加APIみたいなのがあった場合、上記の方法だと友達追加APIのコントローラ、サービスにも暗号化の処理を実装する必要があります。
見ての通り、各機能ごとに毎回記述するのは冗長した記述とも言えます。
そこで、メールアドレスを登録する際に**ミューテタ**を使用すれば、暗号化部分の処理を毎回記述する必要がなくなるのでシンプルになります。
# ミューテタの記述方法
ミューテタの記述方法は以下の通りです。
“`php:User.php
/**
* emai
【EC-CUBE】 プロジェクトをpublic_html配下にインストールする方法
# 初めに
どうも、フランスでプログラマーとして働き始めて1週間ほどの新人エンジニアです。今回、案件でEC-CUBEのインストールからやらせてもらった時に、詰まったところを
備忘録として残します。
## 状況
EC-CUBEの4.2をインストールしたかったので下記を参考にした。
https://doc4.ec-cube.net/quickstart/command_install
上記の公式ドキュメントでコマンドからインストールする手引きでインストールを行うと、
`public_html/ec-cube/`配下にインストールされてしまう。サーバー:Xserver
OS: Linux### やりたいこと
ドキュメント直下に配置したい。## 解決方法
一度`public_html/ec-cube/`配下にインストールする
↓
その後中身の階層を一階層上げる## やり方
①まずはpublic_htmlにcomposer.pharをインストールする②ec-cubeをインストールするコマンドを打つ(この時にec-cubeディレクトリが作成される)
“`
php co
エンジニアインターン2日目
今日はLPのチェックボックスの修正を行った。
JavasctiptやjQueryを使ってチェックの位置を変更しようとした。
そこでnet::ERR_ABORTED 404のエラーが発生した。
調べたところパスがずれていることが問題だった。
この前新しくjsのファイルを作成したところjsファイルを読み込ませようとlinkを読み込ませたところが問題であった。このことを先輩エンジニアに質問したところ一瞬で解決した。linkを消すだけのことだった。
簡単なエラーだったからこそ恥ずかしいし悔しかった。しかし、エラーを解決するための考え方を学ぶことができた。
今はとにかく何でも吸収することが大切であると思う。一日中コードに向き合えるこの機会を大切にしていきたい。
laravel-permissionを利用したロールベースアクセス制御(RBAC)を実装する
## はじめに
RBAC方式でアクセス制御をすることになったので、larave-permissionの概要を簡単にまとめていきます。
初心者の方向けに簡単に概要を把握できるように書いていきます。## laravel-permissionとは
Laravelのプラグインの1つで、**RBAC方式**などの**アクセス制御**を実現することができます。## RBAC方式とは
RBAC方式とは、「**ある対象(例えばユーザー)**」に「**ロール(一般ユーザー・管理者など)**」という概念が割当てられるようにしたものです。この**ロール**に対して、「**何ができるか**」という権限が付与される方式のことです。例えば、「勉強会の一般参加者は**GUESTカード**を渡され、運営側の人は**STAFFカード**が渡される。**STAFFカード**を持っている人は**特定の部屋に入ることができる**。」というように特定の**ロール**に、特定の**行動許可**が付与されるようなイメージです。
## インストール&設定方法
larave-permissionはcomposer経由でイ
【Laravel】API仕様書と実装のテストにツールとしてSpectatorを検討してみた
みなさんはSwagger Editor等で作成したAPI仕様書と実装の乖離をどのようにテストしていますか?
多くの記事で目にするのは、**openapi-psr7-validator**というライブラリです。
https://github.com/thephpleague/openapi-psr7-validator
こちらは**PSR-7に準拠したバリデータを使用する**ため、リクエストとレスポンスもPSR-7仕様に変換するという、少し面倒な工程が必要となります。
もう少し手軽にテストができるライブラリがないか探していたところ、こちらの**Spectator**というライブラリを見つけました。
https://github.com/hotmeteor/spectator
こちらもリクエストとレスポンスの型をテストできるらしく、試しに使ってみたのですが・・・という記事になります。
# 環境
PHP 8.0.8
Laravel Framework 8.58.0
Spectator v1.7.1# 仕様書の保存場所に注意
今回OpenAPI Specのyamlをapp/O
phpでコードカバレッジを取得しながら手動テストをする方法
## はじめに
手動テストを行いながら、バッググラウンドでカバレッジデータを保存し、後で一括してレポートを生成する方法をまとめました。
プログラムを書いた後、テストをしながら実行していない場所がないかを目で確認することができるようになります。
(本来はユニットテストを書けば良いのですが、いろいろ困難な場合もあるので、手動テストでカバレッジを確認できる仕組みが欲しかった)* レポートの出力サンプル([php-code-coverage](https://github.com/sebastianbergmann/php-code-coverage))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276579/6e1ed81e-fc54-d800-8af3-1f7b4509f4f4.png)* CakePHP2で試していますが、環境変数で保存先を指定できますので、環境には依存せず使えるはずです。
* (環境が少々古いので、最新環境だと多少ソースの変更が必要)## 動作確認
PHP 虎の巻(あんちょこ)
# PHP のプログラミングに関する情報
> https://www.php.net/manual/ja/appendices.php| 詳細情報 | 詳細リンク |
| :—- | :—- |
| 関数・メソッドの一覧 | https://www.php.net/manual/ja/indexes.functions.php |
| マニュアル内の全サンプルの一覧 | https://www.php.net/manual/ja/indexes.examples.php |
| PHP 型の比較表 | https://www.php.net/manual/ja/types.comparisons.php |
| リソース型の一覧 | https://www.php.net/manual/ja/resource.php |# PHP の設定/構築に関する情報
> https://www.php.net/manual/ja/appendices.php## 製品サポート期間の確認
– [PHP: Supported Versions](https://www.ph
エンジニアインターン1日目
今日は基本単純作業を行った。
今日は学ぶことより感じたことの方が多かった。
ゴリゴリ開発している先輩エンジニアの横で単純作業…
恥ずかしい気持ちと悔しい気持ちがあった。
一日も早く自立できるエンジニアになりたいと思った。
そう思うからこそ今やっていることを一生懸命取り組んでいきたい。
可変長引数(PHP)
PHPで引数を可変長で渡すテストプログラムを実装しました。
“`PHP
// 可変長引数で合計を計算する
function sum(…$numbers)
{
$total = 0;
foreach($numbers as $number){
$total += $number;
}
return $total;
}// ブラウザ表示
function disp($num){
echo “${num}
“;
}$total1 = sum(3,4,5);
disp($total1);$total2 = sum(1,3,5,7,9,11);
disp($total2);“`
Laravel Sanctumを使ってSPA認証を実装する
## Laravel Sanctumとは
Laravel Sanctumは、SPA(シングルページアプリケーション)、モバイルアプリケーション、およびシンプルなトークン・ベースのAPI向けの簡単な認証システムを提供します。https://laravel.com/docs/9.x/sanctum#introduction
## 設定方法
### インストール
Composerを使ってインストールします。
“`
composer require laravel/sanctum
“`
次に下記コマンドを実行します。これにより、vendor/laravel/sanctum/database/migrationsの中身がdatabase/migrationsにコ、vendor/laravel/sanctum/config/sanctum.phpがconfig/sanctum.phpにコピーされます。
“`
php artisan vendor:publish –provider=”Laravel\Sanctum\SanctumServiceProvider”
“`
今回「dat
初心者必見!Laravelを使うならCollectionを活用しよう
開発をしているとArray型のデータを扱うことが多くあります。
PHPにはArrayに関する様々な関数が実装されていますが、
イテレートや値の変更という点でコードが読みにくくなりがち
という欠点もあります。### Arrayは `array_xx()`の引数となることで変化する場合が多い
もし、下のコードでreturn の結果が実装者の予想と異なり原因を調査したいとして“`php
$numbers = [1, 2];
・ // 間に何十行も処理がはさまっているとする
$numbers = [1, 2, 3];
・
return $numbers;
“`↑こうしたケースでは、$numbersがどう変化したかは追いやすいですが、次のようなケースではどうでしょう?
“`php
$numbers = [1, 2];
・
array_push($numbers, 3);
・
return $numbers;
“`↑$numbersの動きが少し分かりにくくなったかと思います
“`php
$numbers = [1, 2];
PHP 繰り返し処理記述のコツ
はじめに
普段からループ処理を書いていると、途中で何を書いているかわからなくなったり、順番がおかしくなったりすることが多々あったのですが…
良い方法を学んだので書き残しておきます。
繰り返し処理のコツ
1.日本語で本文の処理を書く
2.コードに置き換える
3.ループで囲む
4.変数の初期化等を追記する以上4つの順番で処理を書いていきます。
感覚としては、ループの内側から外側にむかって順番に書いていく感じです。例
例
スーパーで複数の商品を購入して、その合計金額を算出する繰り返し処理
1.日本語で本文の処理を書く
“`php
//料金を取得する
//料金を合計する
“`2.コードに置き換える
“`php
//まぁ料金は$price変数にしようかな~
//購入した商品は$itemにして~
//連想配列でpriceっていうキーを持ってて、そこに値を持ってる感じにしよう
$price = $item[‘price’];//次は料金を合計したいから、$totalに値段を足していけばいいか~
About Access denied for user ‘root’@’172.20.0.1’ error
自分用メモ
docker + mysql が接続できない状態をこちらの記事で解決できました。https://qiita.com/fumi_042/items/7d1c14e335ab1c226e0f
javascript function からphp sessionへデータを渡す?
PHPとJavascvriptの組み合わせによるSESSIONデータの受け渡しを行うサンプルを、AjaxのsendRequestを利用して遷移せずに、PHPプログラムへSESSION関数としてデータを渡す例を記述してみました。
だいぶ以前から使っている、Ajaxライブラリー/ajax/lib/jslb_ajax.jsを使っています。
また、callbackを使えば、遷移せずにデータを取得することも可能です。
dataget.php
“`
“`
上記のようにPOSTデータをSESSIONデータとして受け取るとして、送る側のjavascriptの記述を下記のようにしてみます。
HTML
“`