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

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

phpのenumで状態遷移の管理をする

## 今回試す状態遷移
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348060/9b723af3-2245-e7e0-e9c6-f8bdd20000ab.png)

– 必ず図の流れで遷移する
(例:
販売中→承認済みなどスキップして遷移できない。
申請 or 承認済みからキャンセルになる場合もある。
)

– phpバージョン: 8.1.7

## コード

“`php
name => [State::申請],
State::申請->n

元記事を表示

Laravelメール送信機能

## はじめに
今回も時間かかったLaravelでのメール送信機能を作ったのでそちらを記事に書いていこうと思います。
メール送信機能自体初めてで思ったより上手くいかなくて苦戦したので、これから導入する人の少しでも参考になれば幸いです。

※1ヶ月前くらいから少しづつLaravelの勉強を始めた初心者ですので間違ってる箇所、至らない点などあると思いますが、指摘して頂けると助かります
(こちらは前回の記事と同様にメモとして書いているのでフロント部分は簡易的なものになります)

### 使用する環境
– MacOS(M1)
– PHP 8.0.19
– Laravel 9.19.0
– MySQL 8.0.29

## 前提条件
laravelのプロジェクトを作成しており、認証機能(ログインや会員登録)まで作成済
適当にコントローラーを作成済み
gmailの二段階認証の設定とアプリパスワードの発行済
参考:https://support.google.com/accounts/answer/185833?hl=ja

### .envファイルの設定
“`
MAIL_DRIVER=sm

元記事を表示

laravel8でwebpackではなくvitaがデフォルト読み込みになっているのを修正@vite([‘resources/css/app.css’, ‘resources/js/app.js’])

laravel8をインストールすると、
新規登録、ログインページでvitaが読み込まれており、
@vite([‘resources/css/app.css’, ‘resources/js/app.js’])
が直に表示されていたため、修正。

“`app.blade.php



{{ config(‘app.name’, ‘Laravel’) }}

元記事を表示

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に慣れていないので

元記事を表示

php imagick 背景画像を繰り返す

タイトルの通り
laravel を利用。

“`hoge.php
//背景画像を用意
//576 x 320
$bg = new \Imagick(public_path(‘/img/twitter-bg2.png’));

// 背景画像を繰り返し描写
$x = 0;
$y = 0;
$i = 0;
$s = 0;
while($s < 50){ // リモート画像でもOK //64 x 64 で リピートさせたい画像を用意 $icon = new \Imagick(public_path('/img/bk3.png')); $bg->compositeImage($icon, $icon->getImageCompose(), $x, $y); //画像を重ねる x , y

$i++;

元記事を表示

AWS Linux2 EC2 環境構築 MariaDB

https://qiita.com/TaichiEndoh/items/e7e546cbac21aaa4e20e

研究で作成しなければいけないシステムがあり 
前回作成したシステムを参考にAWS EC2に SQL も使用していきたいと思いました

2022年7月14日現在
AMI AWS Linux2 の場合
実施できる環境に注意が必要だったため共有します

# mySQLに相当するデータベースMariaDB
AWS Linux2 のため
mySQLに相当するデータベースとして、MariaDB
という派生データベースが採用されます

# EC2インスタンスを立ち上げる

## EC2にリモートログイン
“`
ssh -i ~/(設定した)Key ec2-user@[パブリック IP]
“`

## Apacheを入れる
“`
$$ sudo yum -y update
$$ sudo yum -y install httpd
$$ sudo service httpd start
$$ sudo chkconfig httpd on
“`

### html ファイルあるか確

元記事を表示

うちの息子(2歳)が Laravel に詳しすぎる件【グローバルヘルパー編】

:::note warn
前置き
本記事は, Laravel のグローバルヘルパー関数は **使い所を考えよう** という趣旨の記事です.
:::

# リモートワークの朝
ワイ「ファ〜〜〜」
ワイ「今日も12時間寝てもうたわ」
ワイ「さて,業務開始や」
ワイ「今日も Laravel 書いていくで〜」

“`php
use Illuminate\Support\Collection;

// とりあえず心配なので作っとく
$collection = new Collection();
“`

2歳息子「(PC の画面を覗き込む)」

ワイ「どうかしたん?」

息子「・・・」

# リモートワークの昼
ワイ「よーし,昼休憩3時間取ったし,そろそろ業務再開や」
ワイ「さっきの続きやけど,まずは現在時刻を取得せなあかんな」

“`php
use Carbon\Carbon;

// 多分現在時刻が必要になる予感がする
$now = Carbon::now();
“`

息子「(また PC の画面を覗き込む)」

ワイ「な,なんやねんさっきから」
ワイ「ワイの画面にゴミでも付いとるか?

元記事を表示

PHPの値渡し、参照渡しについて

最近学んだのでまとめます。

## 値渡しとは??
“`php
$a = 1;
$b = $a;
echo $b;
// 1
“`
僕含め、よく皆さんが使っているであろうデフォルトの変数の代入です。
想定通りの挙動ですね。
内部的には、$aの**中にある1という値を複製して**$bに渡しています。
文字通り、「値渡し」ですね。

## 参照渡しとは??
“`php
$a = 1;
$b = &$a; // &を使うことで、$aを$bに参照渡しできる
$a = 2;
echo $b;
// 2
“`
あれ?$bには「1が入ってる$a」を代入してるから、$bをechoしたら1じゃないの??
しかし、2が出力されます。
これは、内部的には「**変数$aそのものを$bに渡して**」います。
(正確には、$aの参照先を$bに渡す or 変数のメモリ番地を渡すという言い回しでした)
$aを$bに参照渡しした結果、**$aの値を変えると$bの値も変わります。**
なので、$a、$bも2になってしまう仕組みです。

それを踏まえて下記コード。

“`php

元記事を表示

【Laravel】laravel duskインストール時のエラー解決

# Laravel duskインストール時にエラー発生
公式ドキュメントを見ながらLaravel duskの導入をしていたら、以下のようなエラーが発生しました。
“`plaintext
$ sail artisan dusk:install
Dusk scaffolding installed successfully.
Downloading ChromeDriver binaries…

== 略 ==

file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A000126:SSL routines::unexpected eof while reading
“`

実行環境は以下の通りです。
– OS : macOS Monterey
– PHP : 8.1.6
– Laravel : 9.19.0
– Laravel Dusk : 6.24.0
– Laravel Sail : 1.0.1

# PHPとOpenSSLとの互換性の問題
調べてみると、[*

元記事を表示

Laravel PHP デバッグ やり方 [検索]

こんにちは。やまゆです。

Laravel や PHP のロジックをデバッグしたい時に使える機能をリストアップしてみました。

IDE と xdebug 等を併用した高度なステップ実行デバッグなどではなく、素朴に出力する系についてまとめています。

## PHP 汎用

### echo

[PHP: echo – Manual](https://www.php.net/manual/ja/function.echo.php)

グローバル関数ではなく言語構造です。

これを書いた場所で標準出力に流れます。引数は文字列のみ可能なので、 array とか入れても Array としか表示されません。

“`php
echo [‘a’];
Warning: Array to string conversion in /in/35K9M on line 3
Array
“`

まあ、あまり使うことはないでしょう。

### print_r()

[PHP: print_r – Manual](https://www.php.net/manual/ja/function.print-r)

元記事を表示

PhpStormでマウスを使わずに矩形選択する方法

## 概要
PhpStormでマウスを使わずにキーボードのみで矩形選択する方法が検索してもあまりヒットしなかったため、備忘録として残す。

## 環境
OS:Windows
PhpStormのバージョン:2022.1.3

## 手順
1. Ctrlを2回押す。
2. 1.でそのままCtrlを押しっぱなしで矢印キーで矩形選択できる。

元記事を表示

OTHERカテゴリの最新記事