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

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

Vueでお絵かきアプリ作成4(canvas使用)

#趣向
vueでお絵かき機能を作成する機会があったため作ってみました!
![スクリーンショット 2021-08-15 17.37.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/843952/9ffc5175-6583-9e15-6d03-252324b66008.png)

#3の続き
[前回の3はこちら](https://qiita.com/ryotaro_tech/items/3726db3213d4932c76c1)
このページでは「「リセット」と「画像ダウンロード」とデータを「更新」、「取得」できるようにしたいと思います。

まずはいつもどおりhtml。画面に「リセット」、「画像ダウンロード」、「更新」ボタンを追加します。
また、更新したら更新した画像が次回から背景になる感じですね。

“`HAML:html


元記事を表示

phpstanを用いた際のエラー解消

##~ no value type specified in iterable type array のエラー
以下のエラーに対する改善方法
自分的な解釈では”配列の中身の値に対しても型指定してください”みたいなイメージ

“`
5 Function saleByTime() return type has no value type specified in iterable type array.
? See: https://phpstan.org/blog/solving-phpstan-no-value-type-specified-in-iterable-type
“`

解消後のコードは以下の通り

“`php
// 以下の*部分3行の記述で返り値である$priceの連想配列の中身のキー、値に対する型を指定することで上記のエラーは解消される
/**
* @return array $unitSo

元記事を表示

php artisan optimize コマンドの罠

###php artisan optimize とphp artisan optimize:clearの違いについて

自分自身optimizeコマンドに関して大きく勘違いしており、上記のコマンド(optimize,optimize:clear)は同じであると思っていた。
実際にコマンドを打ってみると分かるが、出てくる内容は全く異なるものである。

“`
# php artisan optimize:clear
Cached events cleared!
Compiled views cleared!
Application cache cleared!
Route cache cleared!
Configuration cache cleared!
Compiled services and packages files removed!
Caches cleared successfully!
“`
“`
# php artisan optimize
Configuration cache cleared!
Configuration cached successful

元記事を表示

php artisan migrate でSQLSTATE[HY000] [2002]のエラーが出る

# はじめに
一度、コンテナなどをdownした後にもう一度upして`migrate`しようとすると、エラーになったので解決した方法をメモします。
いち解決方法なのでご参考になれば幸いです。

# 条件
“`bash
mac OS “11.2.3 Big Sur”
Laravel Framework “6.20.27”
PHP “8.0.7”
nginx “1.18”
mysql “8.0”
“`

# php artisan migrate ができなくなった

“`terminal
❶ docker-compose down
Stopping web_1 … done
Stopping app_1 … done
Stopping db_1 … done
Removing web_1 … done
Removing app_1 … done
Removing db_1 … done
Removing network lantern_default

❷ docker-compose up -d
Creating app_1 … done
Creati

元記事を表示

【Laravel 8 / Sail / Fortify / Sanctum】タスク管理アプリ (ポートフォリオ) の実装過程 (バックエンド編)

主にスキル向上を目的に、ポートフォリオとしてタスク管理アプリを作成しました。このページでは、主にそのバックエンド部分の実装過程について触れていきます。

アプリケーションや作成したコード、フロントエンドの実装過程の説明については、以下のリンクからアクセスできます。

– アプリケーション: [https://www.miwataru.com/](https://www.miwataru.com/)
– GitHub: [https://github.com/zuka-e/laravel-react-task-spa](https://github.com/zuka-e/laravel-react-task-spa)
– 全体像: [https://qiita.com/zuka-e/items/9a985f0dd5db21bc48d7](https://qiita.com/zuka-e/items/9a985f0dd5db21bc48d7)
– フロントエンド実装過程: [https://qiita.com/zuka-e/items/60afcc09464e1016233

元記事を表示

PHP MAMPエラー解除方法

:::note info
MAMPを開きたい。 
:::
![スクリーンショット 2021-08-25 16.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861207/518efa0b-ccc0-8521-7eca-a31894f9d2fd.png)

1 . ホームディレクトリから以下コマンドを実行。

“`ruby:コマンド
sudo lsof -i -P | grep “LISTEN”
“`
2 . パスワードを求められるので入力。
  ( PCのロック解除するパスワード )

3 . ポートの状態が一覧で表示されるので、ここで8888が使われているものを以下のコマンドで削除。

“`ruby:コマンド
kill -9 番号
“`

4 . 全て消し終えたところで再びMAMP起動。

元記事を表示

Laravel8 CRUD+検索機能のテストコード実装

##初めに
こちらの記事では、僕がPF作成で実装したCRUD+検索機能のテストコードについてご紹介します。
正直テストコードはかなり苦戦し、現役エンジニアの方に質問させてもらいながらやっとの思いで実装しました。。
公式ドキュメントや紹介されている記事でやり方がなんとなく分かったとしても、自分の実装したロジックに対してどのようなテストを書くかは自分で考えなくてはいけません。
現役エンジニアの方に言われたのですが、この辺りはテストを書く経験を積むことで養われるので、最初のうちはかなり時間がかかるようです。
人によってロジックが違う分テストの内容も変わってくるので、この記事が少しでも自身のテストを書く際に参考になってもらえると幸いです!

##HTTPリクエスト
###ステータスコード
今回のメインはデータベースのテストになりますが、簡単にHTTPリクエストのテストもご紹介しておきます。
テスト内容:`設定したルートにアクセスした際に想定のステータスコードが返ってくるか`
ログイン者しか使用できない機能に関しては`302`が返ってくるかで、誰でもアクセスできる場合は`200`が返ってくるか確

元記事を表示

Laravel attribute original の違い

#dd()するとよく出てくるこの二つの違いについて調べてみました。

![スクリーンショット 2021-08-25 0.55.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670485/0333391c-6e38-879b-4092-0303bbfe8a4a.png)

#それぞれの違い

##original

originalは名前の通りオリジナルのデータになります。
コレクション型でデータを引っ張ってきてdd()するとoriginalにデータが入ります。

“`php:MainController.php
$boxes = Box::orderBy(‘created_at’, ‘asc’)->get();
dd($boxes);
“`

##attribute

こちらは加工したデータが入ります。
下記のようにmap()関数でdistanceというカラムを増やしてあげると

参考
Laravelのモデルの結果セットに「任意のカラム」を追加する
https://pgmemo.tokyo

元記事を表示

【Laravel】フォームのバリデーションエラー時に入力された値を保持する

# バリデーションエラー時に入力された値を保持する

グローバルに定義されており、どこからでも呼び出せる`old`ヘルパをinput要素のvalueに設定します。

バリデーションを行っていないときは何も表示されず、エラーが発生したときのみ値を表示することができます。

参考:

>old関数はセッションにフラッシュデーターとして保存されている直前の入力値を取得します。

https://readouble.com/laravel/6.x/ja/helpers.html#method-old

“`php:hoge.blade.php
// テキストの内容を保持(type=”date”なども同様)

// チェックされたチェックボックスを保持

元記事を表示

Excelデータをweb上でも管理するアプリ作成[laravel]

題名の通り
Excelにあるデータをweb上でも管理するアプリを作成しました。

こちらにあるExcelファイルのデータをWeb上で管理します
[Excelファイル](https://qiita.com/freelanceradiation/items/7ebaea73b3334fddfd7d)
※Macだと登録シートでデータの登録、一覧表示、変更、削除機能が使えないです。

#要件
・Web上でも顧客管理がしたい。(バックアップも兼ねて)
・検索したい
・検索した結果をExcelに出力したい

#画面
![スクリーンショット 2021-08-24 21.58.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700700/347a38c3-c027-d55c-5e4a-dfd25356d2a5.png)

#機能
・ログイン
・Excelデータ取り込み & 出力
・検索

#実装
今回はExcelデータ取り込み & 出力のみ書いていこうと思います。
参考:[検索機能](https://qiita

元記事を表示

Laravel8 ソートとページネーションを組み合わせる

## 前提
下記記事に沿って、投稿記事の並べ替え機能を設定済みであること。

https://qiita.com/apprentice123/items/ac0645f79d877a0bd33d

## 困ったこと
追加でページネーションを設定したところ、並べ替えが維持されるのは1ページ目のみで、2ページ目以降では順番が維持されない。

## やりたいこと
ページネーションを設定し、1ページ目で並べ替えた通りに2ページ目以降も表示させる。

## コントローラーの変更

すでに`kyslik/column-sortable`をインストールして`sortable`メソッドを使用している。その上でページネーションと組み合わせる場合は、`クラス名::sortable()->paginate(数字)`とする。

もともと

“`app/Http/Controllers/RecordController.php
public function index(){
$records = Record::sortable()->get(); //変更前
 ret

元記事を表示

自作wordpressのテーマにwelcartのプラグインを編集利用する際に使う関数

自作wordpressのテーマにwelcartのプラグインを利用する際に使う関数メモ。
※コメントアウト内容を取得。

“`.php









元記事を表示

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: NO)を解決

phpからデータベースを操作して、掲示板を作る練習をしているときに、エラーコード“`SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: NO)“`表示されてしまう。

私の場合は、ポート番号をデファルトから「3307」変更していたために、エラーが出てしまっていた。

そこで、“`$db = new PDO(“mysql:host=localhost;dbname=bulletinboard”, “root”, “”);“`に:3307を追加し、“`$db = new PDO(“mysql:host=localhost:3307;dbname=bulletinboard”, “root”, “”);“`すると無事に接続できた。

元記事を表示

Webサービスの認証についてまとめる

#はじめに
 APIを利用して認証機能をもつサービスを作成しようとしましたが、認証機能でつまづきました。フレームワークやライブラリを利用して実現しようとしていたのですが、そもそも認証やネットワークの根本的な知識が足りないと考え、認証についてまとめることにしました。この記事はあくまで自分の備忘録なので間違っている可能性などもあるのでご了承ください。適宜更新していきます。

#認証とは
[[1]]より引用

>通信している相手が本人かどうかを確認する手段

より細かく言うと更に大きく3パターンに分けられ通信相手が正当かどうかを確認する**相手認証**、改ざんされたかの検出をする**メッセージ認証**、文書の正当性の保証と本人であることの証明をする**ディジタル認証**の3種類あります。この記事内での認証は一番使われることが多いであろう**相手認証**のことを指すとします。認証、認可などは誤解を生む言葉であり、いたずらに使うものではないと思いますが、一般的にログイン機能のことを認証と認識してる人が多いのでそういう文脈で使わせていただきます。

通信している相手が本人であるかを判断する材料は通

元記事を表示

XAMPPでMysqlのポート番号を変更後にphpMyAdminに接続するとエラーになる

1.xampp>phpMyAdminディレクトリに行き、config.inc.phpファイルを見つける。

2.config.inc.phpファイル内で、“`$cfg[‘Servers’][$i][‘Host’] = ‘127.0.0.1’;“`を探す。

3.“`$cfg[‘Servers’][$i][‘Host’] = ‘127.0.0.1:3307’;“`に変更する。

元記事を表示

XAMPPでMySQLを起動しようとStartをクリックした際にエラーが出力された時の対処法

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206858/5aadf6c0-df96-afdf-0758-0f9d2c2d241c.png)
PHPを使う方はみんな使っている若しくは使ったことがあるのではないでしょうか、ご存じのXAMPP。
このXAMPPで、特にMySQLを動かす際にエラーがよく出力されていたので、メモとしてここに記します。

##エラー現象
XAMPPのControl Panelを起動し、MySQLの「Start」ボタンを押した際に、MySQLが正常に起動しない(Startを押すとすぐに元のStartに戻る)

##エラー内容
実際にXAMPPのログに表示されたものは以下の通りでした。

“`
11:18:27 [mysql] Error: MySQL shutdown unexpectedly.
11:18:27 [mysql] This may be due to a blocked port, missing dependencies,
11:18:27

元記事を表示

[php] 簡易版 位置情報APIの実装

# 注意事項 必ずお読みください
– **リソースの情報が小規模なものに限る**
リクエストを受けると全件返す仕様のため、リソース何千件、何万件あるとメモリリークを起こす可能性があります。
100〜200件程度なら問題ないかと思います。何件という確証は持てないのであくまで目安で。
– **1日のリクエストが小規模なものに限る**
こちらも上記同様、全件返す仕様であるためリクエスト数が多いと当然その分処理が重くなってしまいます。また仕組み上、モックアップの配列からリソース情報を取得しているので、値に応じて厳選してレスポンスを返す仕様ではありません。
→ 改善点 リレーショナルデータベース(MySQL、PostgreSQL等)を利用して必要なデータのみ取得
**※このコードを利用してサーバーが落ちたなど不具合があった場合でも、こちらでは一切の責任を負いません。全て自己責任でお試しください。**

# アプリ利用
– **エリア限定の店舗検索アプリ**
LINE Messaging APIの位置情報を利用した店舗検索を想定してこのAPIを実装し

元記事を表示

簡易的なclearlinuxベースのlumen環境

– コンテナ環境で構築するPHPのベースイメージとして定番のphp-fpmがあるが容量の重さは否めない。
– その対応策としてalpineという軽量ベースイメージを用いることも多いが、堅牢性やパフォーマンスの心配もある。
– そこで今回は、堅牢性やパフォーマンスが高いと言われているclearlinuxをベースイメージにして、軽量FWのlaravel製のlumen環境を作成する。

## 環境
– Mac OS X 10.15.6
– Docker version 20.10.8
– Docker Compose version v2.0.0-rc.1

## 手順

### 必要ファイル作成
– 以下のコマンドを入力して、必要なファイルを作成する。

“`bash
# 作業フォルダ作成 & 移動
mkdir work; cd $_
# docker file作成
touch Dockerfile docker-compose.yml .dockerignore
# nginxの設定ファイル作成
touch default.conf
“`

– 作成後、各ファイルの中身を以下のように

元記事を表示

LaravelでJSのAjaxを使って非同期通信を行う

#laravelでの基本的な非同期通信の仕方です。

ほぼ下記の記事の内容になりますが個人的な補足説明です。

参考記事
https://qiita.com/kakudaisuke/items/01816910b7b9ecba0486

流れ的にはviewにある値をjsに投げてajax通信で定義したroute-からcontrollerに値を飛ばして処理した内容をまたjsonでjsに返してあげます。

まずはdata-review-idの値をjsに投げます。

“`php:index.blade.php


@if (!$box->isLikedBy(Auth::user()))