- 1. 名前競合時の挙動
- 1.1. 【Laravel】画面遷移でエラー発生時、同画面にモーダル表示するようにhandler周りを拡張
- 1.2. JS 公開鍵 暗号化 => PHP 秘密鍵 複合
- 1.3. Dockerで構築したLaravelアプリでStorageをホスト上の外付けHDDに紐付けした話
- 1.4. Laravel 国籍を登録してそれ用のページを作る
- 1.5. 思い立って3時間で画像ダウンロードサイトを立ち上げたときのデプロイ譚
- 1.6. PHP SESSION セッションハイジャック対策 ハッシュ化
- 1.7. PHP SESSION(セッション)基礎
- 1.8. PHP traitについて
- 1.9. abstructと、Interfaceを、10行で説明してみた
- 1.10. 2歳息子「パパ,PHP の Carbon はミュータブルだよ?」
- 1.11. PG見聞録 ~PHP編 トレイト~
- 2. トレイト
Laravel のトランザクションはネストできる
# 環境
動作させている環境は以下です。
Dockerで動かしています。
– PHP: PHP 7.2.28 (cli) (built: Feb 26 2020 13:38:14) ( NTS )
– Laravel: Laravel Framework 6.20.34
– MySQL: mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper# 準備
Laravelアプリケーション上でトランザクションをネストしたときの挙動を検証するにあたって2つ準備をします。
1つ目がテーブルを作ることです。
2つ目がコマンドを作ることです。今回はテーブルにデータを登録するコマンドを実行して検証していきます。コマンドである必要はありませんが、コンソール上で実行できれば楽なのでこれでいきます。
## テーブル
2つのテーブルを用いて挙動を確認します。
`id`カラムだけを持つテーブル(`table_a`, `table_b`)を以下のように用意します。“`
mysql> desc ta
autoloadの仕組み 知っていますか?
## psr-4
.jsonファイルの、psr-4でautoloadは設定されている。
下の例の、 “app/”の部分で、autoloadを掛ける場所を指定する。
“`
{
“autoload”: {
“psr-4”: {
“App\\” : “app/”
}
},
“require”: {
“nesbot/carbon”: “^2.29”
}
}
“`その状態で、composer installをすると、venderフォルダというのが新しく生成される。
venderフォルダの中に、autoloadを動かすためのファイルが入っている。
【phpコマンドでのエラー】ターミナルでの”zsh: command not found: php”を解決する方法
## はじめに
Laravelの開発環境を構築をしようと思い、phpのコマンドを叩いた際につまずいたので
同じような現象で困っている方の解決方法の一つになれば幸いです。## 環境
・OS : macOS Monterey
・バージョン : 12.3.1## 起きている現象
まず、PHPのライブラリ依存関係を管理する「Composer」をインストールするため
下記コマンドを入力。“`
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
“`すると、、、
“`
zsh: command not found: php
“`上記の内容が返ってくる。
※homebrewはインストール済みのため、一応phpのパスを確認 ↓“`
brew –prefix php@7.4
“`
、、、
“`
/usr/○○/○○/php@7.4
“`反応しないのかと思いきや、しっかりとパスは返却される。
## 結論
アップデートができておりませんでした。。。と
転職するかしないか、それが問題だ
シェークスピア氏は言った。転職するかしないか、それが問題だ。
(生きるか死ぬか、それが問題だ。live or die, that’s the question)この数ヶ月、その事ばかり考える。
倒れて行く戦士達。私と同じ日に入社した同僚は先月転職を表明した。
更にその先月、最も有能なエンジニアが胃腸炎と共に退職した。
私自身も以前から企業のカジュアル面談を複数受けている。1年前、入社した瞬間に、いかにこの会社がまずいかはすぐに分かった。
バージョン管理しない、自動テストしない、一番歴が長い先輩のIDEがdream weaver。面接の時githubで管理してるって言ってませんでした?と聞くと、やる予定であってやっているとは言ってない、と。
## やるだけやったか
入社当日に退職を決意した訳だが、、否定するだけなら簡単である。
どんな環境でも一定、学ぶべき事柄、自身が活躍するスポットはあるはずで。自分にできる事は何か。何をすべきか。
現状の分析から入った。会社は受託メインで売上ているが、自社サービスが少数あり、全売上の2割を占める。社長はどんどん新サービスをリリー
PG見聞録 ~PHP編 名前競合~
今日はトレイトやクラスの名前が競合してしまったときの挙動についておさらいしていきます。
名前競合時の挙動
クラスやトレイトの中にある関数が被ってしまったときは優先順位がつけられたり、エラーになったりします。
“`php
【Laravel】画面遷移でエラー発生時、同画面にモーダル表示するようにhandler周りを拡張
Laravel6.x以降であれば使える手法かと思います。(6.x未満では未確認)
# やりたいこと
画面遷移でエラーした時、モーダルにメッセージ出したい。## 前提事項
1. 各箇所毎にモーダルのタイトルやメッセージは違ってくる。
2. モーダルを表示する手法は既存ソース内で確立済み。しかし、ヒジョーに微妙な気がする。※現状の手法
各コントローラーやサービスにて、モーダル用のタイトルやメッセージを設定。
↓
**各箇所でリダイレクト実施。 (うーんなんだかなぁ。。)**
↓
各ビューで出力。# 結論(最終的な落とし所)
* モーダル用のExceptionクラスを作成
* 例外処理も同クラスに定義 (Handlerクラスではなく)
* **コントローラーやサービスは同Exceptionにモーダル情報を設定して投げるだけ (スッキリ!)**
* ビューは渡されてきた情報を元にモーダル描画それでは、具体的な内容に入っていきます。
# まず考えたこと、、
画面毎にモーダルのタイトルやメッセージは違うから、
やっぱりコントローラーでやるしかないかなぁ~
JS 公開鍵 暗号化 => PHP 秘密鍵 複合
メモ。
[ここ](https://qiita.com/buntafujikawa/items/51de0847232a117b272a)を参考にしたけど、自分の環境だとcrypto モジュールがうまく設定できなかったので、JSEncrypt を使う。“`shell
# JSEncryptを入れる
$ yarn add jsencrypt
“`“`JavaScript:JavaScript
import JSEncrypt from ‘jsencrypt’;
import axios from ‘axios ‘;// 公開鍵取得
const publicKey = await(async()=>{
const res = await axios.get(‘/crypt/publickey’);
return res.data || “”;
})();// 暗号化
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
var encrypted = encrypt.encrypt(“ho
Dockerで構築したLaravelアプリでStorageをホスト上の外付けHDDに紐付けした話
**ローカルでのみ開発するのにどうしてもファイルストレージを外付けHDDにしたかった。**
クラウドストレージサービスを使っても良かったのですが、 不要なHDDがあったのでそちらに画像などを保存したかった。
※月額料金が掛かるのが嫌だっただけ(笑)**環境**
・OS :MacOs BigSur(M1 mac)
・Laravel(Docker)XAMPでLaravel構築していればそのまま紐付けられたと思いますが、すでにDockerで構築してあったので、
なんとかMacに外付けしているHDDで出来ないかと思い試行錯誤しました。
あまり同じ事している人いませんよね。。結果、、簡単でした。
コンテナイメージをビルドする時に,
docker-compose.ymlファイルにVolumesに紐付けるだけでした。
そりゃそうですね(笑)**docker-compose.yml**
“`
services:
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
Laravel 国籍を登録してそれ用のページを作る
Laravel.6においてレシピアプリを開発中です。
国別のユーザーごとのレシピを表示する機能を実装し、苦戦したので自分用にメモします。
前提として、usersにnational_idというカラムを持ちユーザー登録時にプルダウンで国籍が登録されるようにしています。
### ルーティングを定義
“`web.php
Route::get(‘/recipes/{country_key}’,’RecipeController@country’)->name(‘recipes.country’);
“`### Viewにプルダウンを表示
“`recipes/index.php
思い立って3時間で画像ダウンロードサイトを立ち上げたときのデプロイ譚
ひょんな事から、画像ファイルの配布(だけの)サイトがあったらいいな。という話になったので、じゃあ久し振りにやってみようという事になったのですが、ここ数年でも意外と色々環境が変わっていたり、すっかり忘れていたりして戸惑った部分があったので、デプロイ譚としてここにまとめ&公開をさせて頂こうと思います。
いたらない実装や建て付けなどもあると思いますが、意外と必要な要素が凝縮されていると思うので、始めてトライする人や同じようなことをしたいという人には面白い内容になるかも知れません。# 1. サーバーの準備
自宅のサーバーでサイトを立ち上げる時代はとっくに終わっているので、レンタルサーバーを採用します。
AWSのEC2という手もありますが、必要の無いレイヤーは手放すのが昨今の定石です。
EC2も大好きですが、EC2ですとOSやWeb Serverの面倒まで見なくてはならないので、工数もコストもリスクも増大します。### 1-1. レンタルサーバーを探す
いつも使っていたQuiccaという100円レンタルサーバーを覚えていたので見に行きました。
既に新規会員登録は終了しているということ
PHP SESSION セッションハイジャック対策 ハッシュ化
# 初めに
自身の備忘録として記述いたします。
一つの方法として見ていただければと思います.
重要な情報を扱う際は、更なる対策が必要になると思いますので、ご注意ください。# セッションハイジャックとは?
攻撃者がログイン中の利用者のセッションIDを不正に取得し、セッションを乗っ取る攻撃手法。
この攻撃手法では利用者のIDやパスワードを知ることなく、アカウントの乗っ取りが可能となってしまう。
## 対策1 パスワードのハッシュ化
### 1:パスワードをハッシュ化する
“password_hash()“を使うことで、簡単にハッシュ化ができます。
“`
$hash_password = password_hash(“パスワード”, PASSWORD_DEFAULT);
“`
### 2:ハッシュ化されたパスワードと、入力されたパスワードの比較
“`password_verify“`を利用することで、
「ハッシュ化されたパスワード」と「ハッシュ化されていないパスワード」が**同一のものか**を判断し、“true“か“false“で返してくれます。
“`
//左側の引
PHP SESSION(セッション)基礎
# 初めに
PHPでセッションを利用する為の基礎的な部分をまとめています。
# SESSION(セッション)とは?
セッションとは、**サーバー側にデータ(変数)を保存する仕組み**のこと。
セッションを利用する事で、ページ遷移の際に、**データ(変数)を送受信しなくても、他ページで利用可能**になる!(めちゃ便利。。。。)分かりやすい利用シーンだと、ECサイトのカート機能等に使われています!
# ◎SESSION(セッション)の使い方
思ったより簡単に使えます!
## 1:セッション管理の開始
“session_start()“でセッション管理を開始します。
ユーザーごとに「セッションID」が割り当てられ、「クッキー」からその値にアクセスできるようになります。
“`
PHP traitについて
複数のtraitを、クラスに持ってこれる。
## traitを使った例文
“`
abstructと、Interfaceを、10行で説明してみた
### Interface
・classの代わりに、interfaceと頭につける(ex. interface ProductInterface{ …})
・複数のインタフェースを継承できる
・メソッドの仕様しか書けない(内容は書けない)
・classでインタフェースを実装する際には、implementsのあとにインタフェース名を指定する
・インターフェイス複数でしか継承する際に選択できない?
### abstruct
・abstractクラスはインスタンス化できない (継承する必要がある)
・abstractメソッドはメソッドの内容を書けないない (interfaceと同様)
2歳息子「パパ,PHP の Carbon はミュータブルだよ?」
## リモートワーク中のある日
ワイ「(カタカタカタカタ・・・ッターン!)」息子(2歳)「パパ,お仕事捗ってそうだね!」
ワイ「仕事?ちゃうで.これは自分専用の**ダイエット管理ツール**や!」
ワイ「リモートワークやと,仕事せんでもバレへんからなぁ」
ワイ「Slack だけ**即レス**しとけば,仕事できる男に見えんねん」
ワイ「その他の時間は個人開発や!」息子「パパ最近**リモートワークで外に全く出ない**から,お腹周りがぷにぷにだもんね」
息子「ダイエット管理で体重が減っても,仕事もしてないからお給料も減っちゃうよ?」ワイ「弊社は**給与自己決定**やから,仕事せんでも給料はもらえるねん」
社長「(お前 Discord **ミュートにし忘れてて**全部聞こえとるからな...!)」
## 新しい機能を追加したい
ワイ「よしよし,新しい機能でも追加するか!」
ワイ「1ヶ月前の自分の体重と,今日の体重とで」
ワイ「どれだけ差があるかを計算する機能を作るで」
ワイ「体重が1kg以上減っていたら,アプリ内通貨の”痩せコイン”がもらえる仕組みや...!」
ワイ「今流行の *
PG見聞録 ~PHP編 トレイト~
梅雨入りしましたね~
低気圧弱いマンにとっては最近の気圧の乱れは非常に堪えますね…
今日はトレイトについておさらいしていきます。
以前laravel(というかcomposer?)で生成されるvendorファイルを見漁っていたら
Traitという文字を見かけて何ぞやと思い調べたのが始まりです。トレイト
トレイトとは「再利用可能なコードをまとめて切り出しておくための仕組み」のことです。
日本語訳を調べてみると「特性」や「特徴」といった意味があるようです。
継承やインターフェースと似ているようで違うので見ていきましょう。“`php
PHPのforeachでは、多くの場合、参照渡しの方がいい?
| [../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|PHPでは、関数を呼び出すとき、引数を「`値渡し`」(&なし)にするか、「`参照渡し`」(&あり)にするか決めないといけない。配列(array)、文字列(string)、他のクラスからインスタンス化したオブジェクトを「構造体」と呼ぶことにすると、以下のルールで決めることになる。
– 関数内で引数で渡された構造体に副作用を与えたいとき –> 参照渡し
– 関数内で引数で渡された構造体に副作用を与えたくないとき –> 値渡し
– 関数内で引数で渡された構造体に対して副作用がないとき –> 参照渡し値渡しでは、引数で与えられた構造体をコピーして受け取る。関数内で引数で与えられた構造体に変更を施しても呼び出し元の構造体が書き換わることはない。一方、参照渡しでは、値をコピーせずに構造体への参照(ポインタというか、アドレスというか)のみを渡す。関数内で引数で与えられた構造体に変更を施すことは、呼び出し元の構造体が書き換わることになる。
## 関
【APNs】プッシュ通知の証明書を更新する。
iOSアプリでプッシュ通知を飛ばすにはAppleDeveloperにて色々設定をしてp12ファイルやらpemファイルやらを用意しないといけないのですが、1年に1回の作業なんて覚えている訳も無く、折角なので備忘録として残す事にしました。
[キーチェーンからcerファイルの作成(Mac)]
Finder→アプリケーション→ユーティリティ→キーチェーンアクセスでキーチェーンアクセスを立ち上げる。
メニューのキーチェーンアクセス→証明書アシスタント→認証局に証明書を要求を選択
ユーザのメールアドレスにAppleDeveloperで使用しているメアドを入れ、要求の処理をディスクに保存、鍵ペア情報を指定にし、続けるボタンを押す。
後は最後までボタン押していけば良い。
これでcerファイルは完成。[AppleDeveloperでの更新処理(Web)]
Certificates,Identifiers&Profiles→Identifiers→NAME一覧からpush通知で使っているNAMEのものを選択→pushNotificationsの横にあるEditを選択Production SSL
PHP 今月の末日を取得 date() strtotime() まとめ
## date() と strtotime() を組み合わせて月末の日付を取得します。
“`php:今月の末尾を取得
var_dump(date(‘Y-m-d’,strtotime(‘last day of this month’)));
“`
**解説**
`date()関数`
“`php:例 2022/1/10の午前5時に実行したとします
date(“Y/m/d H:i:s”); // 2022/10/01 05:00:00
date(“Y/m/10”); // 2022/10/10 10日を指定することもできる
“`
第1引数 → フォーマット
第2引数 → タイムスタンプ(省略可)
※第2引数を指定しなかった場合は「現在の日時」が第1引数のフォーマットで取得されます。**フォーマットの一部を紹介**
|フォーマット|結果|
|:—:|:—:|
| Y | 年4桁 |
| y | 年2桁 |
| L | 閏年かどうか(1が閏年で0が閏年ではない) |
| m | 月(一
[Windows+WSL2]VSCode のphp…executablePath にDocker コンテナ内のPHPを指定する
## 経緯
新しく購入したWindows PC でVSCode を使い始めたら、PHP 関連の拡張機能に「php のパスが正しく通ってませんよ」と指摘される。>Cannot validate since a PHP installation could not be found. Use the setting ‘php.validate.executablePath’ to configure the PHP executable.

Windows 自体にPHPを入れていれば問題ないのだけど、PHPは開発用Docker コンテナの中に入っているのみ。
PHPファイル自体、開発外で使うこともないので、VSCode にもローカルのWindows 環境ではなく
開発環境を参照しておいてほしい。ので、コンテナ内のPHPへパスを