- 0.1. Laravel9 Eloquent 便利そうなリレーションまとめ
- 0.2. Macで brew を利用してPHP複数バージョンを切り替える方法
- 0.3. Guzzleへの移行: PHP開発者が直接cURL関数を使うべきでない理由
- 0.4. 【Mac/VSCODE】PHP intelephenseを使うために四苦八苦したメモ
- 0.5. TruthyとFalthy JavaScriptとPHPの違い
- 0.6. Neither the property “_token” nor one of the methods “_token()”, “get_token()”/”is_token()”/”has_token()” or “__call()” exist and have public access in class “Symfony\Component\Form\FormView”
- 1. CSRF保護が有効になっているのが原因
- 1.1. amazon comprehendをPHPで動かす
- 1.2. LAMPスタックの基本ガイド
- 1.3. PHP 定数について
- 1.4. 【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~
- 1.5. ScoopでPHPをインストールする
- 1.6. 良いユニットテストって何だろう
- 1.7. 【Laravel】大文字・小文字・数字が1文字以上含まれるパスワードの生成方法
- 1.8. 【Laravel】ログイン済みの特定ユーザーのみが閲覧できるページの作成方法
- 1.9. YouTube Data API V3で動画情報を取得する方法: プロジェクト作成からAPIキーの発行まで
- 1.10. formDataでデータを送信するとLaravel(PHP)側で空配列になる原因
- 1.11. 【個人開発】お金貸借り管理BOT作ってみた(Laraevl ✖️ Line Messaging API ✖️ LIFF)
- 1.12. 【OCI】Dockerで作成したイメージをOCIコンテナインスタンスで動かしてみる
- 1.13. symfony2.8 => 3.4 にアップグレード後、キャッシュクリアが出来ない
- 2. 前提
- 3. 動作環境
- 4. エラー内容
Laravel9 Eloquent 便利そうなリレーションまとめ
Laravel9の便利そうなクエリビルダをまとめました。
https://readouble.com/laravel/9.x/ja/eloquent-relationships.html
## has
リレーション先にレコードがあるレコードのみ取得
“`php
// commentが少なくとも1つ以上あるすべてのpostを取得
$posts = Post::has(‘comments’)->get();
“`
## whereRelation
リレーション先のテーブルでwhereをすることができます。
複数の条件を指定したい場合は`whereHas()`を使用します。
“`php
// users → companies.name === $name のユーザーのみ取得
$users = User::whereRelation(‘company’, ‘name’, $name)->get();
“`
## orWhereRelation
`orWhere`のRelation版です。
“`php
// users → companies.name === $name or
Macで brew を利用してPHP複数バージョンを切り替える方法
`brew` を使用して複数の PHP バージョンをインストールし、切り替える方法は、`brew` の `php` タップを使用することで簡単に行えます。以下に手順を示します。
### 1. Homebrew のアップデートとアップグレード:
まず、Homebrewを最新の状態にアップデートし、アップグレードします。
“`bash
brew update
brew upgrade
“`### 2. PHP 7.4 のインストール:
次に、PHP 7.4をインストールします。
“`bash
brew install php@7.4
“`### 3. PHP 8.1 のインストール:
同様に、PHP 8.1もインストールします。
“`bash
brew install php@8.1
“`### 4. バージョンの切り替え:
#### a. PHP 7.4 を利用する場合:
“`bash
brew unlink php
brew link –force –overwrite php@7.4
“`#### b. PHP 8.1 を利用する
Guzzleへの移行: PHP開発者が直接cURL関数を使うべきでない理由
## 導入
長い歴史を持つ[cURL関数](https://www.php.net/manual/ja/ref.curl.php#ref.curl)ですが、近年では[Guzzle](https://docs.guzzlephp.org/en/stable/)というHTTPクライアントライブラリが主流になっている気がします。
なので使えるならGuzzle使ったほうがいいんじゃないかな〜って話を書きたいと思います。※ 外部へリクエストを送信する方法として`file_get_contents`,`file`などの関数も存在しますがこれらも使わないようにすると幸せになれます。
## cURL関数の欠点
cURL関数はHTTPリクエストを行うためのPHPの標準的な手段で、cURL拡張さえ入っていれば外部のライブラリを必要とすることなく動きます。
ただ設計自体がかなり前にされたものなので、ユニットテストや複雑な構文など色々と問題になってきます。
問題を洗い出してみましょう。### 1. 複雑な構文と設定
cURL関数は多くのオプションと設定を抱えており、これらを正確に設定することは
【Mac/VSCODE】PHP intelephenseを使うために四苦八苦したメモ
## 概要
Mac OS 11とかの古めのMacでPHPにコード整形用にPHP intelephense (※1)を入れようとするも、
Macに入っているPHPのバージョンが古いと整形時にエラーが出てしまうため、いろいろ処理までに対応したぞというメモです。
既存のいろんな情報を寄せ集めての対応でしたが、この流れがどこかの誰かの助けになればと思い記録。(※1 VScodeの拡張機能。割とメジャーですてき)
(※2 自分は7.3でした。)## エラー詳細内容
すみません、忘れました。。初っ端から。。
具体的には忘れてしまいましたが、あんたのphpバージョンだと使えねーからエラーやで!
アップデートせえ!みたいなのがvs codeで出てたとおもいます。
結果、紆余曲折な旅に出ました。## phpのバージョンが古いならアップデートしよう!
→ この辺の手順で行いました。
https://www.stub-create.com/blog/php/mamp-brew.htmlが、mac osのバージョンが少し古くなってきているので落とせず。
ここもエラーは残してないので忘れた!
TruthyとFalthy JavaScriptとPHPの違い
## Truthyとは
動的型付け言語において、真偽値型に変換されたらTrueになる値のこと## JSとPHPで異なる例
#### ‘0’(文字列の0)
JSではtrue、PHPではfalse
“`test.js
‘0’ == true // true
“`
“`test.php
‘0’ == true // false
“`
#### [](空配列)
JSではtrue、PHPではfalse
“`test.js
[] == true // true
“`
“`test.php
[] == true // false
“`
ちなみに、JSでは{}(空オブジェクト)もtrue
“`test.js
{} == true // true
“`
#### 公式
https://developer.mozilla.org/ja/docs/Glossary/Truthyhttps://developer.mozilla.org/ja/docs/Glossary/Falsy
https://www.php.net/manual/ja/types.comparisons.p
Neither the property “_token” nor one of the methods “_token()”, “get_token()”/”is_token()”/”has_token()” or “__call()” exist and have public access in class “Symfony\Component\Form\FormView”
CSRF保護が有効になっているのが原因
symfony 2.8 で作成されたウェブサイトを symfony 6 台で再構築している時に表題のエラーが表示されました。
Symfony では CSRF (クロスサイト リクエスト フォージェリ)からの保護がデフォルトで有効になっているようです。通常のウェブサイトの運営であれば有効な方が良いとは思いますが、
今回は、ひとまず開発を先に進めるため旧サイトの設定(CSRF保護は無効)に合わせ、有効化についてはクライアントと相談する事にします。①CSRF 保護有効/無効のパッケージをインストール
“`
composer require symfony/security-csrf
“`②config/packages/framework.yaml の framework以下に csrf_protection: ~ を追加します(CSFR保護の無効化)。
“`
framework:
csrf_protection: ~
“`
公式ドキュメント通りなのですが、エラーメッセージで検索してすぐに分からなか
amazon comprehendをPHPで動かす
## はじめに
個人開発しているwebアプリで機械学習による自然言語処理を使った機能を実装するため、phpから[amazon comprehend](https://docs.aws.amazon.com/ja_jp/comprehend/)を使えるようにしましたが、なかなか苦戦したのでやり方を残しておきます。## 対象者
– amazon comprehendを外部からweb apiのように使いたい人## 結論
phpから感情分析が行えるようになりました
“`php:example.php
‘ap-northeast-1’,
‘version’ => ‘latest’
]);$result = $client->detectSentiment([
‘LanguageCode’ => ‘ja’, // REQU
LAMPスタックの基本ガイド
## はじめに
LAMPは、Linux、Apache、MySQL、PHP(またはPerl、Python)の頭文字を取ったもので、ウェブアプリケーションを構築するためのポピュラーな技術スタックです。この記事では、初学者向けにLAMPスタックの基本的な概念と各コンポーネントの役割について説明します。## LAMPとは?
Linux (オペレーティング システム): LAMPの基盤となるOS。安定性とセキュリティが特徴です。Apache (Webサーバー): ウェブサーバーとしての役割を果たし、クライアントからのリクエストを処理して静的および動的なコンテンツを提供します。
MySQL (データベース管理システム): データベースの作成、読み書き、更新、削除などのデータ管理を担当します。
PHP (スクリプト言語): 動的なウェブページを作成するためのスクリプト言語。データベースとの連携が得意。
## LAMPの特徴
#### オープンソース
LAMPコンポーネントはすべてオープンソースであり、無料で利用できます。これは特に初学者にとって負担のない環境を提供します。####
PHP 定数について
# 対象読者
[こちらの記事と同様](https://qiita.com/bpg_ts/items/1a25f6bd3d4656fb0bda#%E5%AF%BE%E8%B1%A1%E8%AA%AD%E8%80%85 “対象読者”)# 定数とは
### 定数
「データを入れるための箱」、「名前を付けることができる」という点は、変数と役割は一緒。**変数との大きな違いは、「再代入が不可能」であること**。### 定数を使う場合、使わない場合の比較
一度定数を定義すると、プログラム中で使い回せる。また、メンテナンス性が向上するのも便利な点だ。以下に、定数を使わない場合と使う場合のコードの比較を示す。実行結果は同じ。
##### 定数を使わない場合
“`php:定数を使わない場合
‘;
print (200 * 1.1).’
‘;
print (300 * 1.1).’
‘;/* 実行結果
110
220
330
*/
?>
【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~
# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/003a21f31bc8d0546c08)の記事でFlowの環境構築を実施しました。
今回はJson形式のレスポンスを返す簡単なAPIを作成してみたいと思います。# さっそく作ってみた
プロジェクト構成は以下です(今回の話で出てこないものは割愛しました)。
“`Neos.Welcome“`の下にTestControllerを新しく作成していきます。“`
Quickstart
└ Packages/
├ Application/
| └ Neos.Welcome/
| ├ Classes/
| | └ Controller/
| | ├ StandardController.php
| | └ TestController(★)
|
ScoopでPHPをインストールする
勉強するためにWindows環境でXAMPPを利用していて、Macユーザーになったので、Dockerを使いだし、Windowsの方でもDockerを主に利用していたのですが、諸事情でScoopでPHPだけインストールすることにしてみた走り書き。
# とりあえずScoopのアップデート
“`
scoop update
“`“`
Updating Scoop…
Updating ‘main’ bucket…
error: Your local changes to the following files would be overwritten by merge:
bucket/amass.json
bucket/bombardier.json
bucket/drmemory.json
bucket/dynamorio.json
bucket/gitleaks.json
bucket/gosec.json
bucket/grype.json
b
良いユニットテストって何だろう
# はじめに
私が今所属しているチームでは、バックエンドをPHPとLaravelで開発しています。
今までチームとしてユニットテストを書いていなかったのですが、これから機能開発をする際にはユニットテストを書いていこうということになりました。ユニットテストに対する知見がチームとして薄いので、いい機会だと思い社内で勉強会を開催しました。
この記事は、その第一回目でチームに共有した内容です。今回はあくまで理論的な話で、具体的なコードはでてきません。参考にした書籍は、[Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考](https://www.amazon.co.jp/Good-Code-Bad-%EF%BD%9E%E6%8C%81%E7%B6%9A%E5%8F%AF%E8%83%BD%E3%81%AA%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%A8%E3%8
【Laravel】大文字・小文字・数字が1文字以上含まれるパスワードの生成方法
## 概要
下記の条件を満たすパスワードの生成
– 大文字が1文字以上含まれる
– 小文字が1文字以上含まれる
– 数字が1文字以上含まれる
– 文字数は8文字### 環境
– Laravel Sailでの環境構築
– Laravel 10.30.1
– PHP 8.2.12## 実際の記述
“`php
private function generatePassword(): string
{
$password = Str::password(8);if (preg_match(‘/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$/’, $password)) {
return $password;
}return $this->generatePassword();
}
“`## 補足
– `Controller`内のprivateメソッドに定義した際の記述
– ハッシュ化(`Hash::make()`)はメソッドの呼び出し先で処理
– 他の文字
【Laravel】ログイン済みの特定ユーザーのみが閲覧できるページの作成方法
## 概要
– adminユーザーとデフォルトユーザーでテーブルを分けるのではなく、1つのユーザーテーブルのみを作成
– それぞれのユーザーが持つ`admin_id`の値で権限をチェックして、ログイン済み、且つadmin権限を持つユーザーのみが閲覧できるページを作成### 前提
– Laravel Breezeがインストール済
– `admin_id`カラムを持つUserテーブルを作成
– `admin_id`が1の場合、adminユーザー
– `admin_id`が1以外の場合、デフォルトユーザー### 環境
– Laravel Sailでの環境構築
– Laravel 10.30.1
– PHP 8.2.12
– Laravel Breeze## 実際の記述
“`php:app/Models/User.php
// 既存ファイルに以下を追記public function isAdmin(): bool
{
return $this->role_id === 1;
}
“`“`php:app/Http/
YouTube Data API V3で動画情報を取得する方法: プロジェクト作成からAPIキーの発行まで
## はじめに
Youtubeの動画リストサイトを構築する際に、Youtubeの動画情報を取得するYoutube Data API V3を利用しました。YouTube Data API V3は、YouTubeのデータをアプリケーションで利用するための強力なツールです。この記事では、Google Cloud Platformでのプロジェクト作成からAPIキーの発行までの手順を、初心者の方にもわかりやすく説明します。## Google Cloud Platformでのプロジェクトの作成
#### Google Cloud Platform(GCP)にアクセス
[Google Cloud Platform](https://console.cloud.google.com/?hl=ja)にアクセスし、アカウントにログインします。#### プロジェクトの作成
左上のプロジェクトボタンから「新しいプロジェクト」をクリックし、新しいプロジェクトを作成します。プロジェクト名と請求先アカウントを入力し、「作成」ボタンをクリックします。![スクリーンショット 2023-11-17 14.0
formDataでデータを送信するとLaravel(PHP)側で空配列になる原因
## はじめに
Laravelとフロントエンド(例えばReactやNext.js)の間で画像ファイルを送信する際にバイナリデータの送信ではなく、マルチパートフォームデータで送信する際は、`formData`で送らないといけないのですが、AxiosでAPIを叩いてFormDataを送信する際になぜかLaravel側でデータが空配列になってしまう現象です。https://apidog.com/jp/blog/form-data-content-type-introduction/#:~:text=form%2Ddata%E3%81%A8%E3%81%AF%E3%80%81Web,%E3%81%A6%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E5%BD%A2%E5%BC%8F%E3%81%A7%E3%81%99%E3%80%82
## エラー内容
問題の典型的なシナリオは、フロントエンドからLaravelのAPIへフォームデータを送信しようとすると、Laravel側で`$request->all()`や`$request->input()`が空の配列を返す
【個人開発】お金貸借り管理BOT作ってみた(Laraevl ✖️ Line Messaging API ✖️ LIFF)
25卒でエンジニアのインターンをやっている者です。
現在はベトナムのダナンで半年間のエンジニアインターンに参加をしています。
エンジニアを始めてからこれまで、業務以外でオリジナルのアプリを作ってリリースしたことがなかったのですが、作りたいものがあり、結構すぐ作れそうだなと思い今回作成してみましたのでそちらの紹介をします。
これからポートフォリオの開発をしたい人とかの助けになれば良いなと思います。
## 制作動機
作成の動機はここら辺です。
主に自分のお金周りの管理をちゃんとしたいなーという思いが動機としては強いです。– 現在海外のインターンでルームメイトと同居しており、お金の貸し借りが増えたから。
– 返した・返してないが曖昧になりがちだから。
– 自分が適当すぎて不快にさせる可能性があるなと思ったから。
– お金貸し借り管理系のアプリはあったけど、自分の携帯のストレージが逼迫しているからインストールはしたくなかった。
– アプリインストール より使うにあたって心理的ハードルが低いかなと思った。
– インターン先でLINE BOT や telegram BOTの開発に関わ
【OCI】Dockerで作成したイメージをOCIコンテナインスタンスで動かしてみる
# はじめに
今回はOracle Cloud Infrastructure(OCI)が提供している
コンテナインスタンスにNginx + PHPが動作するDockerコンテナを
立てて動かしてみたいと思います。コンテナであれば、VM(Compute)にDocker環境を作って動かせますが、
わざわざそのためにVMを立てて管理するのもスマートではなく
コンテナインスタンスを使ったら手間もかからず利用できるので
そのあたりの簡単な手順を紹介したいと思います。■参考
コンテナ・インスタンスの概要
https://docs.oracle.com/ja-jp/iaas/Content/container-instances/overview-of-container-instances.htmOCI Container Instances概要 / OCI Container Instances
ローカル環境に設定したDockerコンテナでNginx +
symfony2.8 => 3.4 にアップグレード後、キャッシュクリアが出来ない
前提
ローカル環境(xampp)で、Symfony v2.8 を v3.4.49 にアップグレード後、PHP 8.2.10 で動かそうと検証している最中に出会ったエラーです。
動作環境
Windows 10 Pro
XAMPP Version: 8.2.4
PHP 8.2.10
Symfony v3.4.49エラー内容
キャッシュをクリアしようとすると、
“`
php app/console cache:clear –env=dev
“`
エラーになります。
“`
[Semantical Error] The annotation “@Route” in method AppBundle\Controller\DefaultController::indexAction() was
never imported. Did you maybe forget to add a “use” statement for this annotation? in C:\xampp\htd
【PHP】マイナーフレームワーク「Flow」を試してみる~環境構築編~
# 初めに
PHPの「**Flow**」というフレームワークをご存じですか?
おそらくこのフレームワークを知っている人は少ないと思います。自分もその一人でした。先日たまたまFlowを触る機会があり、とりあえずQuickstartを試してみるかと思ったのですが
* **公式ドキュメントの手順が省略されていて、PHP初心者には難しい**
* **マイナーすぎて参考資料が出てこない**ということに苦しめられ、なかなか環境構築が進みませんでした。
github-copilotに助けられながらなんとか完了することができたので、今回は公式ドキュメントの[Quickstart](https://flowframework.readthedocs.io/en/stable/Quickstart/index.html)のソースを元に環境構築方法をまとめてみました!
# Flowとは
Flowとは[flownative](https://www.flownative.com/)社が出しているオープンソースのPHPフレームワークです。**ドメイン駆動設計**(DDD)を中心原理として設計され