- 1. PHPでのclassの使用
- 2. 【PHP】Youtube Data APIで動画のコメントの一覧の取得
- 3. 【PHP】基本文法まとめ(※随時追加予定)
- 4. 高知県のよさこい祭り2022に出るチームとスケジュールをjsonデータにする迄。
- 5. CakePHP4.3のフィクスチャファクトリとプラグインのユニットテスト
- 6. PHPでログインフォームを作成してみました。
- 7. 2022-07-11 apache から file_put_contents で /tmp に書き込んだファイルが見当たらない
- 8. phpのenumで状態遷移の管理をする
- 9. Laravelメール送信機能
- 10. laravel8でwebpackではなくvitaがデフォルト読み込みになっているのを修正@vite(['resources/css/app.css', 'resources/js/app.js'])
- 11. CakePHPでリレーション 先のテーブルの条件検索
- 12. 【PHP初級⑪】for文応用3
- 13. ガチャのひみつ(重み付き乱択アルゴリズム)
- 14. 【PHP】簡単!CSRF 対策
- 15. 【PHP初級⑩】for文応用2
- 16. 【Laravel】1番簡単なエラーメッセージの日本語化
- 17. 【Laravel】Session store not set on request.【Socialite】
- 18. 【Laravel】エラーレスポンスの統一
- 19. 【PHP】巨大なダウンロードファイル作成時にtmpファイルを作成する
- 20. Laravelの汎用的な構成を考えてみた
PHPでのclassの使用
# PHPでclassを学習した
基本的にフレームワークなんかを触りすぎてclassの概念を理解できていると言えなかったので備忘録として残しておく# 実際にclassを使ってみた
# クラスの作成
class Name {
# クラス内で使う変数の定義
private $name;# クラスを呼び出したときに呼び込まれる関数
public function __construct($name) {
$this->name = $name;
}public function getName() {
return $this->name;
}
}# インスタンスの作成
$name = new Name(“Taro”);
$get_name = $name->getName();
echo $get_name;コードが呼び込まれる流れ
① name = new Name(“Taro”)でインスタンスを
【PHP】Youtube Data APIで動画のコメントの一覧の取得
## できること
特定のYoutubeの動画のコメント欄の一覧の取得とcsvファイルへの書き込み## 事前準備
**ライブラリのインストール**
“`
composer require google/apiclient:^2.0
“`**APIキーの取得**
下記が参考になるかと思います。https://qiita.com/gentuki/items/dfd9f4febaec11851c06
https://developers.google.com/youtube
## ソースコード
“`
【PHP】基本文法まとめ(※随時追加予定)
PHPを学習している中で出てきた基本文法をまとめていきたいと思います。
# 基本形
– PHPを使うときは、``でくくる。
– 文末に必ずセミコロンをつける。“`php
“`
# 変数の四則演算
– 省略形の一覧まずは検索機能のコントローラーを作成します。
同時にコントローラーアクションも作成します。“`php
// 変数xに1を代入
$x = 1;// 四則演算の省略形
$x += 10;
$x -= 10;
$x *= 10;
$X /= 10;
$x %= 10;// 値が1のときだけの省略形
$x ++;
$x –;
“`# 文字列の連結
– 文字列の連結は、ドット「.」を使う
– 「.=」で省略して書ける“`php
$name = ‘佐藤’;echo ‘私の名前は’.$name.’です’;
// 結果: 私の名前は佐藤です// 省略形
$name .= ‘にしき’;
echo $name;
// 結果: 佐藤にしき
高知県のよさこい祭り2022に出るチームとスケジュールをjsonデータにする迄。
# 高知県のよさこい祭り2022に出るチームとスケジュールをjsonデータにする迄。
http://www.cciweb.or.jp/kochi/yosakoiweb/schedule/
1. 公式ページからよさこい祭りに出るチームとスケジュールを確認する。
2. 残念ながらチームとスケジュールデータは画像データだった為、OCR処理を行う。
3. OCR後、変換できなかった部分を手動修正する。
4. カンマ区切りのデータを作り下記のPHPコードでjsonファイルを生成する。尚、githubと自サイトに置いておきますのでjsonデータはご自由にお使いください。
https://yosakoi-video.com/yosakoi2022/
https://github.com/taoka-toshiaki/yosakoi2022-json-data
“`php:下記のPHPコード
CakePHP4.3のフィクスチャファクトリとプラグインのユニットテスト
引き続き、baserCMS5の開発にてCakePHP2系から4系への移行を進めています。
CakePHP4.3 より、これまでのフィクスチャマネージャーが非推奨になり、フィクスチャファクトリの利用が推奨されているようです。
色々と仕組みがややこしく、ドキュメントが少ないので記録しておきます。– [フィクスチャのアップグレード](https://book.cakephp.org/4/ja/appendices/fixture-upgrade.html)
従来は、テスト実行時にテーブルの作成とデータ登録がされていたのですが、フィクスチャマネージャーを利用しなくなった事により、テーブルの作成処理が `tests/bootstrap.php` でのマイグレーションでの生成に移行となっている様子。
つまり、 `bootstrap.php` にて、マイグレーションを実行しないとテーブルが作成されない仕様。まず、マイグレーションは `tests/bootstrap.php` 次のように実行します。
“`php
use Migrations\TestSuite\Migrator;
/
PHPでログインフォームを作成してみました。
# PHPでログインフォームを作ってみました
開発環境
・M1 MacBook
・MAMP
・PHP フレームワーク無し
・HTML5
・phpmyAdmin
・エディタ vscode## コード一覧 (会員登録は載せていません)
“`
2022-07-11 apache から file_put_contents で /tmp に書き込んだファイルが見当たらない
CakePHPでリレーション 先のテーブルの条件検索
matchingを使う。
matchingの使い方。
“`
$user_id = $this->request->user_id;$query = $users->find()
->matching(‘relation’, function ($q) use ($user_id) { // useで定義した変数が使えるようになる。
return $q
->where([‘
relation.user_id => $user_id,
relation.created_at => ‘2022-07-15’
})
->limit(10)->offset($offset);
“`
【PHP初級⑪】for文応用3
[問題] (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)
整数値を入力させ、その個数だけ*を、5個おきに空白(スペース)を入れて表示するプログラムを作成せよ。入力値が0以下の値の場合は何も書かなくてよい。# コード
“`php
$a = intval(fgets(STDIN));
for($m = 1; $m <= $a; $m++){ echo '*'; if($m%5 == 0){ echo ' '; } } ``` ↓「12」と入力 # 結果 ``` ***** ***** ** ```
ガチャのひみつ(重み付き乱択アルゴリズム)
# 確率ってなんだっけ?
確率とは何なのだろう。学校で習った確率は、起こりうるすべてのパターンの中から、ある一つの出来事が起こる可能性の高さ(あるいは低さ)を計算で求めたり、それをパーセントで表したりするものであった。
![サイコロの無料素材4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362900/6ff2533d-eb5d-6826-be57-77c5d5e331b0.jpeg)
例えばサイコロを振って、1の目が出る確率、2の目が出る確率、3の目がでる確率、4の目がでる確率、5の目が出る確率、6の目が出る確率。これらがすべて6分の1の確率なのは、起こりうる出来事のパターンが6パターンあるが、実際にサイコロを振ったときにでる目は6パターンのうちの1パターンだからというわけだ。“`php
1,
“2の目” => 2,
“3の目” => 3,
“4の目” => 4,
【PHP】簡単!CSRF 対策
# はじめに
Laravelなどを使わず、シンプルなPHPでフォームを作る場合、csrf対策を自力で行う必要があります。
まあそんな機会は多くないかもしれませんが、覚えておいて損はない、、!
ということでやっていきましょう。入力画面、確認画面、結果画面、3画面の一般的なフォームで実装していきます。
# 入力画面
ランダムな文字列で生成したトークンを、セッションに格納します。
すでにセッションに存在する場合は、そちらを使います。“`php:entry.php
【PHP初級⑩】for文応用2
[問題] (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)
整数値を入力させ、その個数だけ*を表示するプログラムを作成せよ。入力値が0以下の値の場合は何も書かなくてよい。# コード
“`php
$m = intval(fgets(STDIN));
for($a = 1; $a <= $m; $a++){ echo '*'; } echo "\n"; ``` ↓「10」と入力 # 結果 ``` ********** ```
【Laravel】1番簡単なエラーメッセージの日本語化
## 環境
Laravel v9.5.1 (PHP v8.1.3)## やり方
上からコマンドを実行していくだけ!“`
php -r “copy(‘https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php’, ‘install-ja-lang.php’);”
php -f install-ja-lang.php
php -r “unlink(‘install-ja-lang.php’);”
“`
エラーメッセージの日本語化のやり方はさまざまあるけど、公式ドキュメントのやり方が一番簡単で安心な気がする。## 参考
https://readouble.com/laravel/9.x/ja/auth-php.html
【Laravel】Session store not set on request.【Socialite】
## 環境
Laravel v9.5.1 (PHP v8.1.3)## 状況
Socialiteを使ってGoogleログイン機能を実装し、デプロイ後“`/auth/google/redirect“`にアクセスした際下記のエラー。“`
RuntimeException
Session store not set on request.
“`“`api.php
Route::get(‘auth/google/redirect’, function () {
return Socialite::driver(‘google’)->redirect();
});Route::get(‘auth/google/callback’, [OAuthController::class, ‘authGoogleCallback’]);
“`## 解決法
“`web.php“`にルーティングを記載する。
“`Socialite“`はセッション認証なので“`api.php“`ではなくて“`web.php“`に記載しないと動かない。“`web.php
【Laravel】エラーレスポンスの統一
## 環境
Laravel v9.5.1 (PHP v8.1.3)## エラーレスポンスの統一
LaravelのデフォルトのままだとバリデーションエラーとHTTPエラーでエラーレスポンスの形が異なっているため統一する。
エラーメッセージは下記の形で返るようにしたい。“`
{
“message” => “Forbidden”
}
“`## ①Handlerに登録
HandlerにバリデーションエラーとHTTPエラーそれぞれのエラーレスポンスの処理を登録。
“`app/Exceptions/Handler.php
…
public function register()
{
$this->renderable(function (HttpException $e, $request) {
$message = $e->getMessage();switch ($e->getStatusCode()) {
case 401:
$message = __(‘Unauthorized’);
【PHP】巨大なダウンロードファイル作成時にtmpファイルを作成する
# 何故作ったのか
業務中にDBのSELECT結果を加工しcsvで出力する処理があったが、
出力されるファイルサイズが大きく、加工処理も複雑なものであった。
この処理でメモリ多く食ってしまうのではないかと思い簡単な対策として作成した。
## ソース
“`php
$filename = ‘好きなファイル名を入れてください.csv’;
//tmpファイル作成
$csvFile = tmpfile();
$metaData = stream_get_meta_data($csv);
//tmpファイルのパスを取得する
$csvpath = $metaData[‘uri’];
/*
tmpファイルに大量に書き込む処理
*/
//この例ではcsvなのでファイルによってContent-Typeを変える事
header(“Content-Type: text/csv”);
//– ウェブブラウザが独自にMIMEタイプを判断する処理を抑止する
header(“X-Content-Type-Options: nosniff”);
//tmpファイルのサイズを渡す
he
Laravelの汎用的な構成を考えてみた
## はじめに
弊社では、バックエンドにLaravelを使うことが多いです。
Laravelは非常に生産性が高いと考えてます。しかし、さらに生産性を上げるべく、モジュール構成の検討を進めています。
標準化を進めるにあたって、目的としたのは以下のものです。
– ユニットテストを楽に書きたい
– 外部サービスなどは流用しやすいようにモジュール化
– Webページ(blade)とAPIで同じロジックを共有したいこの記事は、これを目指して、試行錯誤している内容となります。
## 前提
– Laravelの機動性の高さを活かすべく、過度に凝ったモジュール構成をしない
– コーディング量が大幅に増えない範囲で検討する
– 実装には[InfyOm](https://infyom.com/)の[LaravelGenelator](https://infyom.com/open-source)を使用する前提とする
(「とりあえず動く」状態からの変更は非常に生産性が高いので)## そうしてできた構成図がこれ
(※説明のため、若干簡略化しています。)
(※あまりUMLに慣れていないので