PHP関連のことを調べてみた2022年06月12日

PHP関連のことを調べてみた2022年06月12日

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

@csrf

OTHERカテゴリの最新記事