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

PHP関連のことを調べてみた2022年08月05日
目次

laravel Featureテストを実行したら「No application encryption key has been specified.」のエラーが出た

# 概要

– Featureテストを実行したらエラーが出たので筆者の場合の解決策をメモ的にまとめる。

# エラー

“`
No application encryption key has been specified.
“`

# エラー原因

– テスト用の.envの`APP_KEY`の値が空だった。
– 通常動作で使用する.envの`APP_KEY`の値をテスト用.envに記載し実行したところエラー解消

元記事を表示

【Laravel】中間テーブルのcreated_atだけに値を入れる方法

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 前提

中間テーブルのidやcreated_atに値が入らない状態で、updated_atには値を入れたくない(カラムが存在しないため)とき

## 解決法

各モデルでリレーションを定義するとき、“`withPivot“`で渡したいカラムを入れる。
これで“`created_at“`がちゃんと保存されるようになる。

“`php

# group model
public function userGroups(): BelongsToMany
{
return $this->belongsToMany(UserGroup::class)
->withPivot(‘id’, ‘group_id’, ‘user_id’, ‘user_group_id’, ‘created_at’);
}

# user model
public function userGroups(): BelongsToMany
{
return $this->belongsToM

元記事を表示

【Laravel】timestamps()実行後、updated_atのみ削除する方法

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 前提
最初のマイグレーション時の
“`
$table->timestamps();
“`

で“`created_at“`と“`updated_at“`カラムが入っている状態。
“`updated_at“`カラムが不要になったので削除したい。

## 方法
新たなマイグレーションファイルを作成して、下記でマイグレーション実行する。
downメソッドも書き忘れずに!
“`php
public function up()
{
Schema::table(‘posts’, function (Blueprint $table) {
$table->dropColumn(‘updated_at’);
});
}

public function down()
{
Schema::table(‘posts’, function (Blueprint $table) {

元記事を表示

【Laravel】401エラーでリダイレクトせずに任意のメッセージを返す方法

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 前提
401エラー時に、“`middleware auth“`がログインのエンドポイントにリダイレクトするようになっているのを

“`
{
“message” => “Unauthorized”
}
“`
と返ってくるようにしたい。

## 方法
“`Handler“`に下記を追記。
“`AuthenticationException“`の“`unauthenticated“`メソッドをオーバーライドする。
これでやりたいエラーメッセージの形と401コードを返してくれる。

“`app/Exceptions/Handler.php
use Illuminate\Auth\AuthenticationException;

protected function unauthenticated($request, AuthenticationException $e): JsonResponse
{
$errorMessage = [
‘message’

元記事を表示

mysqlとlaravelで文字列の自動採番実装した時のメモ

# はじめに
mysqlとlaravelで文字列としてオートインクリメントな自動採番を実装する際に少し詰まったのでそれをメモしていきたいと思う

# 目次
1. [前提の仕様](#Chapter1)
1. [調べて分かったこと](#Chapter2)
1. [解決方法](#Chapter3)
1. [参考文献](#reference)


# 前提の仕様
・IDとは別で自動採番する必要のあるカラム「hoge」があった
・「hoge」カラムはmysql側でvarchar型として保存されている
・1から順に数を増やして登録していくが、「’001’」,「’002’」といった形式で行う


# 調べて分かったこと
まず最初にmysql側でオートインクリメントで登録できないかと考えたが、それができるのは数値(int)で登録しているカラムのみで、できないようだった。
なので自動採番のロジックはlaravel側で行うのが最も良さそう。
また、ロジックにおいては、DBの「hoge」カラムから最大値をとって、プラス1

元記事を表示

phpをwindowsコマンドラインで動かすのに必要な最小限のファイル

## 動かすのに必要な最小ファイル

以下2ファイルだけで動く。

“`go
php.exe
php5.dll (もしくは php5ts.dll)
“`

### バージョンごとのphp~.dllのサイズ

| php~.dll | サイズ | 備考 |
|:–|:–|:–|
| 4.3 | 1252 kb | – |
| 4.4.6 | 1372 kb | mysqlへの接続はdll不要 (内包) |
| 5.2.17nts | 4729 kb | mysqlへの接続は ext/libmysql.dll 指定 |
| 5.4.9 | 5938 kb | 配列の短縮構文。xp最後のバージョン |
| 8.1.9 | 8912 kb | 2022-08-04最新バージョン |

* [php 5.4.9 download
](https://windows.php.net/downloads/releases/archives/php-5.4.9-Win32-VC9-x86.zip)

| version | 対応 |
|:–|:–|
| 4.0.6 | mb_conver

元記事を表示

filter_inputの早見表

## 環境
PHP 7.4

## filter_inputとは
[filter_input](https://www.php.net/manual/ja/function.filter-input.php)をご確認して下さい。
※ typeを `INPUT_GET` のみで検証しておりますので、POSTで利用する場合には下記の早見表は参考までのご確認に留めていただくようにお願いします。

## filter_input早見表
| $value | FILTER_DEFAULT | FILTER_VALIDATE_INT | FILTER_VALIDATE_FLOAT | FILTER_VALIDATE_BOOLEAN |
|:-:|:-:|:-:|:-:|:-:|
| 1 | string(1) “1” | int(1) | float(1) | bool(true) |
| 0 | string(1) “0” | int(0) | float(0) | bool(false) |
| ‘1’ | string(3) “1” | NULL (false) | NULL (false)

元記事を表示

【PHP初級㊴】配列応用5~複数変数のループ~

[問題]  (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)

{3, 7, 0, 8, 4, 1, 9, 6, 5, 2}で初期化される大きさ10の整数型配列を宣言し、最初は参照する要素番号を0とする。この参照する要素番号の配列要素の値から次の要素番号の配列要素の値を引いた値を表示し、参照する要素番号を1増やす。この手順を9回繰り返すプログラムを作成せよ。

# コード
“`php
$a = [3,7,0,8,4,1,9,6,5,2];
for($i = 1,$k = 0; $i <= 9; $i++,$k++){ echo $a[$k]-$a[$k+1],PHP_EOL; } ``` # 結果 ``` -4 7 -8 4 3 -8 3 1 3 ``` ★問題㊳と同様に、複数の変数を変化させるfor文を用いる。

元記事を表示

【PHP初級㊳】配列応用4~複数変数のループ~

[問題]  (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)

{3, 7, 0, 8, 4, 1, 9, 6, 5, 2}で初期化される大きさ10の整数型配列を宣言し、最初は参照する要素番号を0とし、この参照する要素番号の配列要素の値を表示し、次にその配列要素の値を次の参照する要素番号とし、この次の参照する要素番号の配列要素の値を表示し、さらにその配列要素の値を次の参照する要素番号とし、……を10回繰り返すプログラムを作成せよ。

# コード
“`php
$a = [3,7,0,8,4,1,9,6,5,2];
for($i = 1,$k = 0; $i <= 10; $i++,$k = $a[$k]){ echo $a[$k],PHP_EOL; } ``` # 結果 ``` 3 8 5 1 7 6 9 2 0 3 ``` ★複数の変数を変化させるfor文を用いる。

元記事を表示

【PHP】日付から曜日を返す方法

使う機会があったのでメモ。

“`
/**
* 日付を元に曜日(英語)を返す
*
* @param string $date 日付 ex.’2022-01-02′
* @return string 曜日 ex.’sun’
*/
function getDayOfWeek($date) {
$dayOfWeek = [0 => ‘sun’, 1 => ‘mon’, 2 => ‘tue’, 3 => ‘wed’, 4 => ‘thu’, 5 => ‘fri’, 6 => ‘sat’];
return $dayOfWeek[date(‘w’, strtotime($date))];
}
“`

※英語の曜日の場合、もっと簡潔に書く方法をコメントにて教えていただきました。
 ありがとうございます。

元記事を表示

PHPでせっかく型の指定ができるのに、なにもかもarray型で指定するって気持ち悪くない?

# 何をやりたいか
PHPのarrayってめっちゃ便利ですよね。
ただし、タイトルどおりではあるのですが、**arrayは使いたいが、PHPでせっかく型の指定ができるようになったのに、なにもかもarray型で指定するって気持ち悪くない?** というエントリーです。
最近のPHPは、関数の引数だけでなく、戻り値に対しても型の指定ができるようになったのですが、データのやり取りに利用するデータ型はarray型が非常に扱いやすいにも関わらず、array型はその中身がどうなっているのかを何も保証しないという問題があり、全部arrayで型を指定してしまうのは気持ち悪いなというのが発端。
arrayを(ほぼ)arrayのまま簡単に別の型名をつけて利用できるようになれば嬉しいなぁというお話。

## array型をそのまま使うと気持ち悪い例
適当なCSVファイルに含まれたユーザー別のスコアデータの中から1番成績の良いデータを抽出する例。
sqliteに打ち込むべきと言われたらその通りですが、、、。

“` php

元記事を表示

PHP関数、言語構造

* PDOStatement::bindParam — 指定された変数名にパラメータをバインドする

“`
public PDOStatement::bindParam(
string|int $param,
mixed &$var,
int $type = PDO::PARAM_STR,
int $maxLength = 0,
mixed $driverOptions = null
): bool
“`

#### PDO::prepare

* PDO::prepare — 文を実行する準備を行い、文オブジェクトを返す

“`
public PDO::prepare(string $query, array $options = []): PDOStatement|false

変数名->prepare();
“`

#### PDOStatement::execute

* PDOStatement::execute — プリペアドステートメントを実行する

“`
public PDOStatement::execute(?arr

元記事を表示

【PHP】try-catch-finallyの挙動について

ふと、tryやcatchのブロックでreturnしている場合finallyのブロックって実行されるのかな?と疑問に思ったので詳しく調べてみることにしました。

## そもそもtry-catch-finallyとは
tryブロックの中の処理に例外的なエラーが発生したときにcatchブロックの処理がされます。エラーが発生しなかった場合はcatchブロックの処理はされません。エラーハンドリングをする際によく使われます。
そしてfinallyとは例外は発生したかどうかは関係なくtryおよびcatchブロックの後で常に実行されます。

早速挙動確認していきます。
“`php
try {
echo ‘try’;
} catch (Exception $e) {
echo ‘catch’;
echo $e->getMessage();
} finally {
echo ‘finally’;
}

//実行結果
try
finally
“`
例外が発生していないのでcatchブロックの処理はされません。

次はあえて例外を発生させてみます。
“`php
try {

元記事を表示

PHPでGoogleスプレッドシートの値を取得する方法

## 前提
– Web開発経験なし(環境もなし)
– Mac OS(intel)
– ローカル環境で実施
– Webサイトでスプレッドシートの値を取得したい
– Google Sheets APIを使う

## 作業1 – ターミナル
### 1. homebrewを知る
homebrewとは何?と思ったので以下を参考に気持ち把握する
https://qiita.com/omega999/items/6f65217b81ad3fffe7e6

### 2. homebrewをインストール
1. 以下を参考に実施する(インストール途中、思ったより止まったけど待っていれば完了するはず)
https://qiita.com/zaburo/items/29fe23c1ceb6056109fd

2. Appleシリコンの場合は以下を参考にしてMacがパスを通す(intel前提だけどメモとして)
https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc#1.-%E3%83%91%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A

元記事を表示

山浦清透さんの「独学エンジニア」をはじめてみた

## 前提
エンジニアの世界には「完璧を目指すよりまず終わらせろ(Done is better than perfect.)」という格言があるそうです。
Facebook創業者(元:Meta)のマークザッカーバーグの言葉だそうです。
本記事も、まずは書き散らし程度に「完成」させて「投稿・公開」することが目的になります。

## プログラミング学習歴
プログラミングスクールで1,000時間以上の学習をしたうえで内定(2023年1月入社)もいただけているので、全くの初学者ではないです。
ただ実務経験はないので、学んできたPHP/Laravelを伸ばす目的で「独学エンジニア」はレベル感や使用言語などあらゆる面で今の自分に最適だと思いました。

その他詳細は下記リンク(Wantedly)に記載
https://www.wantedly.com/id/msys825

## 受講後になっていたい姿を書き出そう(課題)
レッスン1の課題の一つになります。(下記リンク課題)
どうせ書き出すのであれば、Qiita記事にして公開してみようと思いました。
https://dokugaku-enginee

元記事を表示

【PHP】配列[3,7,0,8,4,1,9,6,5,2]を定義し、1回目は配列の要素番号を0で表示し、次にその配列の要素番号を表示する10回繰り返すプログラムを作成せよ

[3, 7, 0, 8, 4, 1, 9, 6, 5, 2]で初期化される配列を宣言し、最初は参照する要素番号を0とし、この参照する要素番号の配列要素の値を表示し、次にその配列要素の値を次の参照する要素番号とし、この次の参照する要素番号の配列要素の値を表示し、さらにその配列要素の値を次の参照する要素番号とし、……を10回繰り返すプログラムを作成せよ。(具体的にどのような手順かは実行例を見て考えよう。)

# コード
“`PHP

元記事を表示

LaravelとmicroCMSでのコンテンツ管理 microCMSのAPI作成編

PHPフレームワークであるLaravelと、ヘッドレスCMSであるmicroCMSで、コンテンツ管理機能を実装する手法をご紹介します。自分が実装する際にはあまり参考記事がなく苦労した部分もありましたので皆様のお役に立てれば幸いです。Laravelの実装とmicroCMSのコンテンツ管理2つに関してハンズオン形式で記述していきます。

この記事では、microCMSのコンテンツ管理に関してハンズオン形式でご説明していきます。

# microCMSでコンテンツ管理

今回はヘッドレスCMSであるmicroCMSでコンテンツ作成を行います。
ヘッドレスCMSとはHTMLやCSSは管理せず、データのみを管理するCMSになります。
データ管理の仕方はデータベースに近いイメージで、値のみを保存します。
APIを作成してエンドポイントにGETリクエストを送るとjson形式でデータが返されるので、それをLaravel側で受け取って内容を表示します。

## 1. microCMSアカウントとプロジェクトを作成

microCMSのホームページから新規アカウント登録を行います。

https://m

元記事を表示

【サーバー】無料でクライアントサーバー型のゲームを制作する3

# はじめに
[前回は環境構築](https://qiita.com/kappysan/items/0fa9079468197780d712)をしました。
今回はサーバーサイドの実装を進めます。
[こちら](https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d)のようなLaravel入門記事が参考になります。

# 仕様
以下の画像のようなランキング機能を実装します。
![ランキングモーダル.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/07b017bd-f0e3-ec8d-2954-d5ee8ccea07b.jpeg)
ランキングにはユーザー名とスコアを表示します。
ゲーム開始前にユーザー登録はなく、ランキング登録時のみユーザー登録できるようになっています。
ランキング登録時に、新規ユーザーの場合はスコア登録と同時にユーザー登録も行い、既存ユーザーの場合はハイスコアなら更新します。

# DB設計
## ユーザー情報テーブル
`u

元記事を表示

【環境構築】無料でクライアントサーバー型のゲームを制作する2

# はじめに
私用のPCでクライアントサーバー型のゲームを制作したかったので、環境構築からはじめました。
クライアントサイドはUnity/C#を使います。
サーバーサイドはMAMPでローカルサーバーを構築し、PHP/Laravelを使います。
MAMPではなくAWSが使えるとよかったのですが、無料でできなくなるので諦めました。
ローカルサーバーなので、公開はできず、自分用になります。

# 動作環境
Mac OS Catalina 10.15.7

# クライアントサイドの環境構築
unityとvscodeをインストールします。
これらはすでにインストールしていたので手順を省きます。
バージョンは以下のものを使いました。
Unity 2020.1.8f1

# サーバーサイドの環境構築
## MAMPの導入
[こちら](https://qiita.com/tsukishimaao/items/cab4caa065d901608856)の記事を参考に進めます。
まずはMAMPをインストールします。MAMP PROは使いません。
MAMPを立ち上げ、Preferences>Portsを確認

元記事を表示

【ゲーム紹介】無料でクライアントサーバー型のゲームを制作する1

# ゲーム紹介
蜂を操作して制限時間内にできるだけたくさんの花の蜜を集めるゲームです。
![ミツあつめ3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/829f84ed-b892-66e2-a9f2-3d851a51cb78.gif)
左右の矢印キーまたはボタンクリックで蜂を動かします。
落ちてくる「おはな」に触れるとポイントゲットです。
![ミツあつめ2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/67919da1-7d80-57a3-c973-7321952345d8.gif)
天敵の「とり」に触れると集めた「おはな」ポイントが0になってしまいます。
![ミツあつめ4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664789/d4ac2eb3-15d4-f0b0-3bf5-1a23f5704cb7.gi

元記事を表示

OTHERカテゴリの最新記事