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

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

【エラー対応】General error: 1215 Cannot add foreign key constraint【Laravel】

MySQLの外部キー制約を追加する際にエラーが出ました。
“`
General error: 1215 Cannot add foreign key constraint
“`
解決するのに30分程度も使ってしまったので、、、、対処方法をここにまとめます。

(環境:PHP8.0/Laravel/MySQL)

## 確認①:型の不一致

データ型があっていないと、同様のエラーが出ます。

– idの片側にunsignedがついている
– smaillintとtinyintをつなげようとしている

データ型を合わせるために、外部キーに指定するidを修正してみましょう。

## 確認②:Migrationファイルの順番は正しいか

今回のエラーの原因はこちらでした。

Laravelでは、CREATE TABLEを使わずにPHPで定義されたファイルを作成・実行して、MySQLにテーブルを作ります。
このとき、CREATE TABLEされる実行順は、日付の古い順になります。まだ生成されていないテーブルにリレーションを貼ろうとするとエラーになってしまうんです、、。

今回は解決方法とし

元記事を表示

axiosでページ遷移してフラッシュメッセージを出す!

# [何をするか?](#-2.何をするか?)
WEBサービス内でコンテンツを削除したりする際にモーダル画面を出す時は
Vue.jsでやったりする方が楽だったりします。

その際にaxiosを使用して削除実行後に特定のページ、または同一ページに遷移した後に
フラッシュメッセージを出したいとします。いや、出したい。

削除用ルーティング
“`web.php
Route::post(‘/delete/{id}’,’DeleteController@idea_delete’)->name(‘delete’);
“`

下記の様に削除ボタンがあったとしましょう。
今回は簡単な例なのでController内の記述は省きます
propsで削除する対象のidとweb.phpに記載してるルーティングを記載
ちなみに文字列をpropsで渡す場合は「:」付けるとエラーになります。
“`item_detail.blade.php

元記事を表示

laravel-modulesを使ってみた

# 概要

– laravel-modulesというライブラリを使ってみたので使った時のメモと導入方法を残す。

# できるようになること

– `app/Modules`直下に`app/`直下と近い構成のファイル群を生成して各モジュールごとに疎結合な開発をする事ができる。
– 最近流行り?のモジュラモノリスアプリケーションの構築に向いている。
– モジュラモノリス
– マイクロサービスがかなり難しいから、もうちょっと簡単に誰でも使えるようにした開発スタイル
– ドメインごとにモジュールを分けて疎結合にするが、DBは一個
– メリット
– モジュールごとに疎結合なのでスパゲッティコードになりにくい。
– いざマイクロサービスにしますぞ!ってなったときに切り出しやすい。
– デメリット
– DBは一個なのでモジュールをまたぐ外部キー制約などがあるとマイグレーションとかがちょっと面倒になるらしい。(教えていただきました。)

# 導入方法

1.

元記事を表示

laravel-ide-helperを使ってみた

# 概要

– laravel-ide-helperというライブラリを使ってみたので使った時のメモと導入方法を残す。

# できるようになること

– モデルクラスのコード補完とタイプチェックができるようになる。
– 下記のようなコードが`TestController.php`に記載されていた時、`$user_id = $user->id;`の`->id`部分にマウスカーソルを持っていってもコード補完されない。

“`app/Http/Controller/TestController.php
id;

元記事を表示

【メモ】XAMPP&LaravelでHello World!

web系のサーバーサイドエンジニアを目指す奴のメモ書きです。
環境:Windows10

この連載の

https://codezine.jp/article/corner/765

第一回目の記事に沿ってやっていくよ!

https://codezine.jp/article/detail/11231

# 前提
### XAMPPインストール済みであること

https://qiita.com/4U5zo/items/178a65d500211a39e5a1

### Composerインストール済みであること

https://qiita.com/4U5zo/items/0660dfcb91f503428f78

# プロジェクトフォルダ作成
XAMPPに同梱されているApacheを使って開発したい場合は、XAMPPのドキュメントルート直下にプロジェクトフォルダが作成されるようにしよう。ドキュメントルートはデフォルトでは`XAMPP\htdocs`ディレクトリだよ!

では早速ドキュメントルートにLaravelプロジェクトを作成しよう。
コマンドプロンプトを起動して
“`
X

元記事を表示

【メモ】XAMPPのApache&MariaDBサービス競合エラー解消法

web系のサーバーサイドエンジニアを目指す奴のメモ書きです。
環境:windows10

# XAMPPのエラーを解消する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626978/df154ca9-3303-4222-5228-e03419cb10f7.png)

今回出たエラーはこちら!
“`
20:33:57 [Apache] Apache Service detected with wrong path
20:33:57 [Apache] Change XAMPP Apache and Control Panel settings or
20:33:57 [Apache] Uninstall/disable the other service manually first
20:33:57 [Apache] Found Path: “c:\Apache24\bin\httpd.exe” -k runservice
20:33:57 [Apache] E

元記事を表示

月初と月末の日にちを取得 その月の最初、最後の曜日の日にちを取得 PHP

## 用途
月初と月末の日にちを取得したい時に使う。
その月の最初、最後の曜日の日にちを取得したい時に使う。(例:最初の月曜日の日にち。最後の月曜日の日にち)

## 使用方法
**現在の月の月初と月末の日にちを取得**
“`php:例
// 2022/04/15に行っている
$firstDay = date(‘d’, strtotime(‘first day of’));
$lastDay = date(‘d’, strtotime(‘last day of’));

var_dump($firstDay);
// ’01’
var_dump($lastDay);
// ’30’
“`
※date の第一引数に `y-m-d` と入力すると `22-04-01` という形式で返ってくる。
 
**指定した月の月初と月末の日にちを取得**
“`php:例
$hoge = “2000-01”
$firstDay = date(‘d’, strtotime(‘first day of’ . $hoge));
$lastDay = date(‘d’, strtotime(‘last d

元記事を表示

【PHP】PDF内のQRコードを読み取る

# はじめに
PDF内のQRコードをサーバーサイドで読み取りたいと思い、なんだかんだと調べて簡単な実装は出来たのですが、商用利用は難しそうだということで業務に使えなかった方法をここに載せます。

# 1. 環境
– Windows10 64bit
– xampp
– PHP8.1

# 2. 使用したライブラリ

| ライブラリ名 | version | ライセンス | ざっくりした概要 |
|:-:|:-:|:-:|:-:|
| [endroid/qrCode](https://github.com/endroid/qr-code) | 4.4.8 |MIT | QRコードの読み取りを行うことが出来る |
| [Imagemagick](https://imagemagick.org/) | 7.1.0 | GPL互換の独自ライセンス | 画像操作することが出来る |
| [Ghostscript](https://www.ghostscript.com/) | 9.56.1 | AGPLか商用のデュアルライセンス | PDFを読み取って画像に変換し

元記事を表示

【PHP】’シングルクォート’と”ダブルクォート”の使い分け

# | 概要

– PHPで使用する場合
– 変数とは
– まとめ

## | PHPで使用する場合

PHPの学習を進めていると、文字列として文字を扱う時に’シングルクオーテーション’または”ダブルクォーテーション”を使うのを知ったが果たして違いはあるのか、またどっちがいいのか?など気になったので色々サイトをみて調べてみました。

#### 変数とは
以下の文書の中で変数と言う言葉がよくでてくるので、まず最初に変数について紹介させていただきます。

プログラムを書くときに、長い文字列や、同じ数値・計算式を何度も繰り返し使うこともあります。
その都度同じ文字列や数値をソースコード内に記述していくのは誤記しやすいですし、手間なのでその際に変数を使用します。

`変数 = データを保存しておく箱のイメージがいいと思います。`

##### PHPにおいて変数名(箱)の名前を付ける際には、以下のルールに沿って変数名をつけます。

– 必ず【$】から始まる
– 使えるのは半角英数字、_(アンダースコア)
– 大文字小文字は区別される
– 【$】のあとに数字は使えない($name123 ○、

元記事を表示

Livewire不要 Laravelページネーション後の自動スクロール

# [何をしたいか](#-2.はじめに)
ページネーション後にリロードされて一番上に行くのではなく
ページネーション後はある要素まで自動でスクロールしたい時があります。
amazonのレビューみたいな感じで。

LaravelであればLivewireを使用してページネーションを作成すれば良いですが
Laravelのバージョンが古いと使えないのかな?

まぁ、jQueryでサクッと実装できるのでコピペして使ってください。
なので別にLaravelとか関係ないです。

“`Scroll.js
$(function(){

//URLパラメータ取得
function getParam(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, “\\$&”);
var regex = new RegExp(“[?&]” + name + “(=([^&#]*)|&|#|$)”),
res

元記事を表示

【Laravel】FileMaker接続をGuzzleHttpで行う

# はじめに
Laravelでアプリを作成していて、DBはMySQLを使用してましたが、
既存システムの**FileMaker**との連携が必要だったので、
その時の学びをアウトプットします。

今回は**GuzzleHttp**を使用しました。

事前にPostmanやVScodeのThunderClientでのAPI接続確認してください!
またレスポンスの確認もしてください。

その上でコードに落とし込んだ内容です。

# 環境
・Laravel 8
・FileMaker Server 17

# 公式ドキュメント
基本的にはこちらを参照してます。
https://fmhelp.filemaker.com/docs/17/ja/dataapi/

# 前準備
必要な情報は以下。
・接続先URL
・データベース名
・レイアウト名(テーブル名みたいなもの)
・ユーザー名
・パスワード

これらの情報について直書きしているような記述をしてますが、
`.env`に記載し、`config`ファイルで読み込みし、
`config(‘filemaker.url’)`みたいに読み込んでいます。

元記事を表示

CodeIgniter4 の $this->validate() でラベル付きのエラーメッセージを使用する

[公式ドキュメント](https://codeigniter4.github.io/userguide/libraries/validation.html)に記法が示されていなかったので。

# 確認環境
– CodeIgniter4 v4.1.9
– PHP 8.1.4

# 対応方法
Controller クラスの `validate()` メソッドでラベル付きのエラーメッセージを使用する場合は以下。

“`diff_php:UserController
public function create()
{
$input = $this->validate([
– ‘name’ => ‘required|max_length[100]’,
– ‘email’ => ‘required|valid_email|is_unique[users.email]’,
– ‘password’ => ‘required|min_length[8]’
+ ‘name’ => [‘label’ => ‘ユーザー名’

元記事を表示

Laravel Passportのoauth系ルーティングはどこで定義されているのか

# 概要

– Laravel Passportのoauth系のルーティングはどこで定義されているのか追ってみた。

# 結果

– `vendor/laravel/passport/src/Passport.php`にルーティングに関する記載があった。

“`vendor/laravel/passport/src/Passport.php
/**
* Binds the Passport routes into the controller.
*
* @param callable|null $callback
* @param array $options
* @return void
*/
public static function routes($callback = null, array $options = [])
{
$callback = $callback ?: function ($router) {
$router->a

元記事を表示

Laravel Passportを実際に体験してみる

# 概要

– Laravel Passportを導入してちょっと使ってみた時のメモ

# 導入方法

1. 下記コマンドを実行してライブラリそのものをインストールする。

“`terminal
$ composer require laravel/pasport
“`

1. 下記コマンドを実行してマイグレーションを行う。

“`terminal
$ php artisan migrate
“`

1. 下記コマンドを実行してPassportをインストールする。(トークンを作成するための暗号化キーとPersonal access clientとPassword grant clientが作成されるらしい。)

“`terminal
$ php artisan passport:install
“`

1. 上記コマンドで発行された各種情報はDBのoauth_clientsテーブルに自動で格納される。
1. `use Laravel\Passport\HasApiTokens;`の記載を`App/Mod

元記事を表示

TypeScriptでLaravel製APIのバリデーションエラーのレスポンスボディに型をつける(型ガード付き)

タイトルの通り、Laravel製APIのバリデーションエラーのレスポンスにTSで型をつけていきます。フォームのリクエスト処理とかで便利かと。
まずレスポンスの見本を見ていきましょう。
“`json
{
“message”: “The given data was invalid.”,
“errors”: {
“【リクエストボディのプロパティ名】” : [“【エラーメッセージ】”,”【エラーメッセージ2】]
}
}
“`
**errorsというプロパティ名なのにオブジェクト**なのが紛らわしいのと、 **エラーメッセージの配列が入ってる**あたりに注意が必要です。

“`ts
export type ValidationError = {
message: string,
errors: Record>
}

//あえて”==”で比較するだけでnull&undefinedを最小のコードで検出できる
const isNullOrUndefined = (unknown: unknown

元記事を表示

【メモ】Composerについて学ぶ(Laravelプロジェクト作成編)

web系のサーバーサイドエンジニアを目指す奴のメモ書きです。

# Composerとは

>Composerは、PHPでの依存関係管理のためのツールです。 プロジェクトが依存するライブラリを宣言することができ、それらを管理(インストール/更新)します。

# 依存関係の管理
YumやAptなどとは異なり、Composerはプロジェクト内のvendorディレクトリなどにパッケージまたはライブラリをインストールする。
つまりプロジェクト単位でパッケージやライブラリのインストールができるということ。

デフォルトとしてプロジェクト単位でインストールする仕様になっているが、globalコマンドを使用すると他のプロジェクトでもインストールしたパッケージやライブラリを参照できるようなる?

Composerを使ってプロジェクトで使いたいライブラリを宣言すると、そのライブラリだけでなく、ライブラリが依存しているライブラリをバージョンの整合性を崩さないようにプロジェクトにインストールすることができる。
依存関係を更新する場合もコマンド一つで実施可能。

# システム要求
2022/4/13現在の最

元記事を表示

HubSpot Client Library でインポートしたい

# はじめに
MAサービスである[HubSpot](https://www.hubspot.jp/)は、APIにアクセスするための[クライアントライブラリ](https://github.com/HubSpot/hubspot-api-php)を公開しているが、[ドキュメント](https://developers.hubspot.jp/docs/api/crm/imports)がいまいちわかりにくく、さらにインポートに関してはリクエストのサンプルコードが掲載されていない。ライブラリを使ったインポート機能を開発する際に非常に苦労した。
そのため、備忘録を残しておく。

# サンプルコード
~~~PHP:
“インポート名”,
“dateFormat” => “YEAR_MONTH_DAY”, // (*)ポイント
“files” => [
[
“fileName” =>

元記事を表示

dompdf セキュリティ警告:人気のある PHP PDF ライブラリに RCE の脆弱性が発見される

本記事は、2022年3月18日に公開したブログ[dompdf security alert: RCE vulnerability found in popular PHP PDF library](https://snyk.io/blog/security-alert-php-pdf-library-dompdf-rce/?utm_source=QiitaBlog&utm_medium=Referral&utm_campaign=QiitaBlog)を日本語化した内容です。
![logo-vertical-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/759e17f2-f43c-1cfb-e3f3-361c614f6f6e.png)

# はじめに
先日、Positive Security社の研究者が、一般的なPDF生成ライブラリである[dompdfにリモートコード実行(RCE)の重大な脆弱性](https://security.snyk.io/vuln

元記事を表示

MAMPのWeb Startがクリックできない時の対処法

# MAMPでWeb Startがクリックできなくなった
簡単な記事になるのですが、下の画像のWeb Startがクリックできなくなり
php adminの確認ができなくなってしまいました。
下の写真は問題なくクリックできる状態です。

![スクリーンショット 2022-04-14 16.56.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/b8ca800f-beff-b3d6-5942-ede3baa9b572.png)

# 試してみたこと
1. PHPのバージョンを変える  特に効果なかった
2. referencesのポート番号を変えてみるが効果なし
3. サーバーを起動したり再起動するが変わらず

# 解決できた方法
***PCを再起動したら解決***できました。
原因はわかりませんでした。

# 注意
上の解決方法は自分のやり方なので、それぞれの状況によって変わってくるので注意してください。

元記事を表示

Laravelの中間テーブルにcreated_atだけ自動的に渡す方法

# 確認したバージョン

Laravel 8

# どういうこと?

以下のようなクラスがあったとします。

“`php
class Foo extends Model
{
public function bars() {
$this->belongsToMany(Bar::class);
}
}
“`

このとき、barsの中間テーブルとなる`foo_bar`に作成日時を勝手にinsertしてほしいといった事があるかと思います。

自動でやってくれないかな?と思って、何も考えずにsyncやattachをすると、created_atカラムはnot null制約があるから違反してるぞ!と怒られちゃいます。

まず思いつくのは以下です。正直先程までこの方法を使っていました。

“`php
$foo->bars()->attach($id, [‘created_at’ => Carbon::now()]);
“`

とか

“`php
$foo->bars()->syncWithPivotValues($ids, [‘created_at’ => C

元記事を表示

OTHERカテゴリの最新記事