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

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

PHP 複数階層にある特定のファイルのみをrequire_onceする

## 名前空間構成
“`json:composer.json
{
“require”: {
<省略>
},
“autoload”: {
“psr-4”:{ “App\\”: “root/” }
}
}
“`

## ディレクトリ構造
“`
root/
├─ functions/
│ ├─ func1.php
│ └─ nest/
│ └─ func2.php
└─ Main.php
“`

## 関数ファイル
“`php:func1.php
namespace App\functions;

function func1() {
echo “func1” . PHP_EOL;
}
“`
“`php:func2.php
namespace App\functions\nest;

function func2() {
echo “func2” . PHP_EOL;
}
“`

## 読み込み
“`php:Main.php
namespace App;

us

元記事を表示

最新Laravle9.19.x ~ のbreeze ログイン実装コマンド

## Laravle9.19.x ~ breeze ログインができない?を解決
みなさんこんにちは
[ジーズアカデミー学校長 山崎ですm(_ _)m](https://gsacademy.jp/mentor/)
今回はLaravel9.19からLOGINを生成するコマンドが変わったようなのでメモしておきます。

### 環境
AmazonLinux2/cloud9

#### Laravel9.19.x ログイン画面作成
##### breezeをインストール

“`cmd:ターミナル

#1. Laravel 9.19~ の場合
composer require laravel/breeze –dev

#2. artisan コマンドを実行
php artisan breeze:install

#3. npmパッケージをインストール
npm install

#4. パッケージをビルド
#公式サイトでは「npm run dev」
npm run build

#5.テーブル作成
php artisan migrate

“`

![スクリーンショット

元記事を表示

[改丁版]早期リターンで簡単リファクタリング

# はじめに
https://qiita.com/ks_jaga/items/6c6a1c0c7e8ac0e2fbdd

以前に投稿したこちらの記事のコードがいまいちだったため、新たに書き直しました。

# ネストの深いコード
ユーザーのログインを判定する関数です。
以下の条件を満たしていればログインを許可します。
– 有料プランであること
– 利用期間内であること
– バンを受けていないこと

“`php
getPlan();

// プランの利用開始日を取得
$contractStartDate = $user->getLastContractStartDate();

// プランの利用終了日を取得
$contractEndDate = $user->getLastContractEndDate();

// ユーザーのバン情報を取

元記事を表示

GtmプラグインでbaserCMSにGoogle Tag Managerのタグを自動で出力。

https://market.basercms.net/products/detail.php?product_id=148

2023 年 7 月 1 日にユニバーサル アナリティクスのサポートは終了すると[アナリティクス公式サイト](https://support.google.com/analytics/answer/11583528)で発表されておりますが、それに伴い、[Google アナリティクス 4 の導入](https://support.google.com/analytics/answer/10089681)を急がれている方も多いかと思います。

また、Google 広告 タグなど、広告の効果測定を行いたいと考えている方も多いかと思います。

そのために「まず既存サイトにGoogleTagManagerを導入したい」と考えている方で、[baserCMS](https://basercms.net/)をお使いの方に方におすすめのプラグインがbaserCMSの[Google Tag Manager コンテナID設定プラグイン(自動出力)](https://market.

元記事を表示

paiza問題集から組になったデータの入力(PHP)

paizaの標準入力問題集から組になったデータの入力をPHPで実装しました。
今回は8番目のデータを標準出力で出力します。

“`PHP
//データの個数を入力する
$num = trim(fgets(STDIN));
for($i=1;$i<=$num;$i++){ //データを入力する $data = trim(fgets(STDIN)); //8番目のデータの場合、標準出力に出力する。 if($i == 8){ echo $data; } } ``` 以上のコードになります。

元記事を表示

Laravel9.1 Sailを使ってDocker開発環境を構築~Herokuへデプロイする(Windows)

Laravel Sailを使ってDocker開発環境を構築&Herokuへのデプロイをしていきます。
Sailを使うとかなり簡単にLaravel + Docker + MySQLなどが揃った開発環境を一気にそろえる事ができます。

Dockerは使いこなせたら非常に強力なんですが、取っ付き辛いですし初学者がいきなり触るとくじける事も多いんじゃないかな・・・とりあえずLaravel触ってみて何かを作ってみたい!ってんならSailは最高のツールだと思います。

ついでにHerokuへのデプロイも。せっかく作ったアプリなので公開しないともったいない。
Herokuへのデプロイもそんなに難しくなかったです。
ちなみにHerokuとは、ざっくり言うとWEBアプリを動かせるサーバ環境を提供しているサービス。
他にもAmazonのAWSとか。

## やってみた感想
いくつか上手くいかないポイントがありましたが大抵打ち間違いだったり、ちょっと調べれば解決する事ばかりでした。

## 環境
Win10+VSC@1.68
Laravel@9.1+PHP@8.1(Sail)
Ubuntu@20.04

元記事を表示

【PHP】TrelloAPIで作成日を取りたい!

PHPで、TrelloAPIからカード情報を取得して
一覧表示するというプログラムを作っています。

欲しい情報が取れなくて2日ほど悩んだのですが、
意外としょぼいところで躓いていたことが判明し
悔しかったので備忘録のために残しておきます。

APIマニュアルの前に、通常のマニュアルを見ろという話だね。
あるあるだね・・・

# TrelloAPIでボードに紐づく全カード情報を取る

ホード情報に紐づくカード全部の情報を取得する(上限1000件っぽい)
APIリファレンスは[こちら](https://developer.atlassian.com/cloud/trello/rest/api-group-boards/#api-boards-id-cards-get)

APIキーやトークン取得は他の方が書かれているのでそちらを参照のこと
▶[参考](https://yu88life.com/1748/)

“`
//バージョンやトークンなど{}の値はそれぞれの環境にあったものを設定してください
$_endpoint = “https://api.trello.com/{VERSIO

元記事を表示

【Laravel】DBのデータを取得するAPIを自作し、フロント側から叩いてコンソールに表示させてみる

バックエンドとフロントエンドを切り分けた環境で、バックエンドのデータをフロントエンドに表示させる部分を学習中です。
今回は、データベースのデータを取得するAPIを作って、fetchとasync/awaitでフロント側に表示させることに成功したので、
流れを備忘録として残しておきます。

# 前提
– フロントエンドとバックエンドを切り分けている
– 自作APIを用いる
– データベースを使用する
– PostgreSQL

# 環境
– PHP 8.1.7
– Laravel Framework 9.18.0
– psql (PostgreSQL) 14.4
– MacOS Monterey 12.2.1

# 開発手順

## 1. バックエンド、フロントエンドでそれぞれディレクトリを用意し、別々にターミナルを開いて移動しておく
“`php:ターミナル1
mkdir todo-api
cd todo-api
“`
“`php:ターミナル2
mkdir todo-front
cd todo-front
“`

## 2. フロントエンドのファイルを構成する

– tod

元記事を表示

xdebugがPHP環境に入っているかどうかでvar_dump()の出力形式が変わる

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|

xdebugがPHP環境に入っているかどうかでvar_dump()の出力形式が変わることを知った。

以前、var_dump2($user)でダンプすると、以下の感じだった。シンプルでいい。var_dump2()は「[行数を節約するvar_dump()を書いてみた](https://qiita.com/taconana/items/5cafacc6bb8229e97d3f)」を参照のこと。
“`
class samples\User#1 (4) {
private $mail => string(11) “aaa@xxx.com”
private $id => string(4) “U001”
private $name => string(12) “池田さん”
public $name => string(12) “山本さん”
}
“`
XAMPPを入れ替えて、var_dump2($user)を試すと、以下の感じに変わってし

元記事を表示

配列から指定したデータを直接変数に代入する

TypeScriptで**分割代入**が日常的に使われてるのでPHPでもできるのか調べてたらありました。
PHPで見かけたことがないのでマイナーっぽいです。

## まずは標準的なやり方。
“`php
$array = [1, 2, 3];
$a = $array[0];
$b = $array[1];
$c = $array[2];
“`
## リスト構文を使うやり方。
“`php
[$a, $b, $c] = [1, 2, 3];

//$a 1
//$b 2
//$c 3
“`
## 順不同でよくなるため、連想配列の方が安全に割り当て可能。
“`php
[“a” => $a,”b” => $b,”c” => $c] = [“a” => 1,”b” => 2,”c” => 3];

//$a 1
//$b 2
//$c 3
“`
## compact関数を組み合わせてキーを振った連想配列を組み立ててから使うと便利。
“`php:配列の組み立て
$a = 1;
$b = 2;
$c = 3;

$array = compact(“a”, “b”, “c”);
“`
`

元記事を表示

【Laravel】データベースのデータがブラウザに表示されない

コントローラーで、データベースのデータを取得したいのに上手く取得できないため、そもそもの部分の理解のために備忘録を書きます。

# 前提

– Todoアプリを作っております。
– TodoController.phpのindexアクションが実行された時に、DBのtodosテーブルから全データを引っ張ってこれるようにしたい。

# 現状

### コントローラ
“`php:todo-api/app/Http/Controllers/TodoController.php

元記事を表示

【Laravel】Base table or view not found: Table ‘(サービス名).(テーブル名)’ doesn’t exist

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

## 状況

テスト実行時に下記のエラー。

“`
Base table or view not found: 1146 Table ‘(サービス名).(テーブル名)’ doesn’t exist
“`

## 解決法

公式ドキュメントには
>どのデータベーステーブルがFlightモデルに対応するかをEloquentに知らせていないことにお気づきかもしれません。別の名前を明示的に指定しない限り、クラスの複数形の「スネークケース」をテーブル名として使用します。
モデルの対応するデータベーステーブルがこの規約に適合しない場合は、モデルにtableプロパティを定義してモデルのテーブル名を自分で指定できます。

今回のエラーが例えば下記だった場合、
“`
Base table or view not found: 1146 Table ‘(サービス名).flight’ doesn’t exist
“`
モデルでテーブル名を指定しなかったのでEloquentが「flights」を使用しており、エラーが出た。

下記

元記事を表示

【Laravel】Block Kitを使ったSlack通知機能

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

## Block Kitを使った通知機能
“`Notification“`を使ってSlack通知機能を実装した記事はたくさん見かけたが、“`Notification“`に加え、リッチなメッセージを作成できる“`Block Kit“`を使った通知機能は見なかったので仕組みを理解し実装するのに時間がかかってしまった。

https://api.slack.com/block-kit

## 実装
大体はドキュメント通りに実装し、“`toSlack()“`の中にデフォルトで書いてある“`new SlackMessage->to()“`は使わずに下記のように変更。

“`php

元記事を表示

HomebrewでPHP7.3インストールする方法2022年版

## まえがき
業務上、PHP8.1とPHP7.3を行き来して作業する必要があったのですが
Homebrewを使ってPHP8.1 → 7.3に切り替えようとしたところ「古いバージョンだからbrew上で管理してないよ!だからインストール出来ないよ!」というエラーが発生。

結構苦労したので、備忘録代わりにメモ。

## 前提
環境は以下の通りです。

macOS Monterey 12.2.1
Homebrew 3.5.2
PHP 8.1(インストール済み) → 7.3(インストールしたい)

## やり方
元々PHPがインストールされていない場合、1行目は不要です。
また、バージョンは各自インストールされているバージョンを指定します。

“`
$ brew unlink php@8.1
$ brew tap shivammathur/php
$ brew reinstall shivammathur/php/php@7.3
“`

パス修正する
“`
$ vi ~/.zshrc
$ source ~/.zshrc
“`

これでOK。

## ちなみに
7.3から8.1に戻すと

元記事を表示

PHPでループの要素を参照渡しにするときの注意

PHPのループで参照渡しを使ったコードが思い通りの挙動にならず、いろいろ調べてたら面白い例を見つけたので紹介。

こんなコードがあったとする。
“`php
$a = array(‘a’, ‘b’, ‘c’, ‘d’);

foreach ($a as &$v) {}

print_r($a);

foreach ($a as $v) {}

print_r($a);
“`
2回の`print_r($a);`の結果は同じになりそうなものだけど実際は以下のようになる。
“`
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => c
)

“`
なぜかというと、まず1個目のループは参照渡しなので、
“`
$vがaが入ってる1個目のコンテナ(※)を指す
$vがbが入ってる2個目コンテナを指す
$vがcが入ってる3個目コンテナを指す
$vがdが入ってる4個目コンテナを指す
“`
という流れで`$v`の

元記事を表示

Bakeコマンドでスピーディーな開発へ

## はじめに
今回はCakePHPのbakeコマンドについて
紹介していこうと思います。

## Bakeコマンドとは
bakeとは、CakePHPのMVCモデルによる
**Webアプリケーションの雛形を自動生成**するための機能です。
CUI(コマンド)のツールでコマンドで打つことで実行が可能です。

## 必要なもの
テーブルデータを元に自動生成するものがあるため、
最初にテーブルを作成させましょう。

## Bakeコマンドで作れるもの
:::note warn
警告
Windows システムの場合は
下記のコマンドを入力する際に、`bin\cake bake`で入力してださい。
:::
#### ・コントローラー
コントローラーは`controller + コントローラー名`で生成できます。
“`
$ bin/cake bake controller Articles
“`
テストコードが不要な場合は、**–no-test** オプションをつけましょう。

#### ・モデル
モデルは`Model+ テーブル名`で生成できます。

:::note warn
警告
指定し

元記事を表示

laravel Mockeryを使ってテストを書く(外部APIアクセスをモック化)

# 概要

– laravelのUnitテストにて外部API実行関数の戻り値をMockeryを使って定義する方法を簡単にまとめる。

# ご注意

– 今回は汎用的にまとめようと思う。従って記事のコードをそのままコピペしても動作しないと思われる。

# 前提

– 下記の方法でMockeryのインストールを済ませておく。
– [laravel Mockeryを使ってテストを書く(インストール準備編)](https://qiita.com/miriwo/items/0f8fdf91177f6c3cb713)

# 方法

1. artisanコマンドを用いて任意のUnitテストのクラスを用意する。

“`terminal
$ php artisan make:test –unit FooTest
“`

1. UnitテストクラスのsetUp()関数内でモック化したい関数が所属するクラスを指定してテストダブルを定義する。

“`FooTest.php

元記事を表示

laravel Mockeryを使ってテストを書く(インストール準備編)

# 概要

– laravelの環境にMockeryをインストールして使えるところまで持っていく方法をメモ的にまとめる。

# 方法

1. 下記コマンドを実行してMockeryをcomposerでインストールする。

“`terminal
$ composer require –dev mockery/mockery
“`

1. composer.jsonを確認し、require-devにMockeryの情報が追記されていれば準備完了である。

“`composer.json
“require-dev”: {
“mockery/mockery”: “^1.5”,
}
“`

1. tinkerにて下記を実行し、エラーがでないことを確認する。

“`php
$mock = \Mockery::mock(‘foo’);
“`

# 参考文献

– [https://readouble.com/mockery/1.0/ja/index.html](https://readoubl

元記事を表示

PHP の static の種類,全部言えるかな?

## Q1

商品の在庫ごとに割り振られる連番の商品 ID を, PHP 上で自動採番するクラスを考えます。下記で使われている `static` に関して

– ? どういう役目を持っているでしょうか?
– ? どの PHP バージョン以降で有効でしょうか?
(但し,PHP 5.0 より前には遡りません)
– ? **出力される商品 ID はどうなるでしょうか?**

“`php
id = ++static::$counter;
}
}

class SpecialP

元記事を表示

【Laravel】論理削除(SoftDelete)採用時の注意点・検討事項

Laravelでは論理削除(SoftDelete)が割と簡単に実装できる。
しかし、いざ実装しようと思ったら注意 or 検討すべき点がいくつかあったのでメモ。

## Cascade

物理削除(完全削除)の場合、cascadeを設定しておけば、削除したレコードに紐づいているテーブルのレコードも一緒に消えてくれる。しかし論理削除の場合は消えてくれない。

もし紐づいてるテーブルのレコードも一緒に論理削除したい場合は、laravel-soft-cascadeというパッケージを使用する必要等がある。詳しくは以下記事様が解説してくださってます。

https://zakkuri.life/%E3%80%90laravel%E3%80%91ondeletecascade%E3%81%97%E3%81%A6%E3%82%8B%E3%81%AE%E3%81%AB%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%87%E3%83%BC%E3%82%BF%E3%81%8C%E8%AB%96%E7%90%86/

 
## メールア

元記事を表示

OTHERカテゴリの最新記事