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

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

Adapterパターンを使うメリットとPHP実装例

※この投稿は[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030)を読んだ感想と復習を兼ねたまとめです

### Adapterパターンとは

Adapterパターンはデザインパターンのひとつで、既存のクラスを修正することなく、インタフェースを変更するための手法です。

[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E

元記事を表示

PHP 条件演算子(三項演算子)の省略構文「??」

# 目的

– 先輩方が記載したコードを読んでいて初めて知ったものだったのでまとめる

# 三項演算子`??`

– この演算子は別名null合体演算子とも呼ばれる。
– 下記に例を記載する。

“`php
式1 ?? 式2;
“`
– 式1がnullではない場合には式1が実行される。
– 式1がnullの時は式2が実行される。

# 具体例

– 変数$strに文字列を格納する処理を記載する。
– 変数$base_strに文字列が格納されている時は変数$base_strの文字列を変数$strに格納する。
– 変数$base_strがnullの時は文字列「base_str is null」を変数$strに格納する。

“`php
$str = $base_str ?? ‘base_str is null’;
“`

元記事を表示

直感的に使えるPHPコマンドラインオプションパーサーを作った

https://packagist.org/packages/d0riven/php-flags#0.1

## TL;DR;

自分が欲しいPHPコマンドラインオプションパーサーがなかったので作った。
このライブラリはドキュメントを見なくても使えるくらいシンプルかつ型チェックが行えるコマンドラインオプションパーサーである。
PHPライブラリを作ったことで色々と周辺技術や最新のCIなどを学べて良かった。

## 作ろうと思った背景

[AuraCli](http://auraphp.com/framework/2.x/ja/cli/)をプロジェクトで採用しており、個人的にそれに違和感はなかった。
しかし、PHPに慣れていないメンバーからわかり辛いという声が上がった。

理由は `shortやlongの表現, :, ::, \*, などの記号が何を意味しているかがドキュメントみないと分からない` という物だった。
当初は「いや、それくらいドキュメント見るでしょ…」と思ったのだがgoなどのオプションパーサー(e.g. flag, kingpin, go-flags)に比べるとたしかに以下の

元記事を表示

Iteratorパターンを使うメリットとPHP実装例

※この投稿は[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030)を読んだ感想と復習を兼ねたまとめです

Iteratorパターンは、デザインパターンの1つで、集合に含まれる要素を1つずつ取り出したいときに使用されるようです。

次のようなクラス図で説明されていました。

スクリーンショット 2020-08-06 8.32.51.pngLaravel+Vue.jsで作成したSPAサイトでOGP対応

#はじめに
個人開発でLaravel5.5とVue.jsを使用して作成したSPAサイトがあり、長らく放置していたのですが、最近勉強を兼ねて少しリファクタリングをしようかなと思いました。

[ラブライブ専用掲示板](https://lovelivebbs.jp)

上記が作成したサイト(掲示板)になります。
治すべき部分はたくさんあるのですが、まず気になったのがTwitterカードの表示です。
特に、掲示板のスレッドURLをツイートした際に、デフォルトの情報が表示されてしまうのが見た目の部分で致命的でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254954/a4475d41-aa84-c23b-8d30-9e0baada6e36.png)

## まずやったこと
最初にapiでスレッドの情報を読み込んだ後のタイミングで`querySelector`を使用して動的にmetaタグを変更しました。

“`javascript
//APIでデータ取得後
document.title =

元記事を表示

都内の行きつけの居酒屋新規開拓サービスをリリースしたらダダ滑りしたので反省会・考察します【Laravel】

# 行きつけの居酒屋を新規開拓できるWEBサービスを作ったので振り返ります
初投稿です。
酔いどれ([@yoido_re](https://twitter.com/yoido_re))です。

この記事は先月7月末にプレリリースした個人開発のサービス、[東京歩くマップ](https://alcmap.tokyo/)について、リリースから約1週間が経ったのでリリースまでの道のりから現状について皆さんに宣伝も兼ねてお話します。

東京歩くマップ – TokyoAlc.Map 行きつけの居酒屋を新規開拓しよう!
https://alcmap.tokyo/

![スクリーンショット 2020-08-04 20.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73435/a89e5d3e-4e94-3109-34b2-38fd9be36782.png)

## リリースした東京歩くマップとは
タイトルにも掲げている通り、東京歩くマップとは、東京都内に限定した行きつけの居酒屋を新規開拓するために、ユーザ

元記事を表示

ユーザー情報をセッションに格納する方法

#ユーザー情報をセッションに格納する方法

phpを使用したポートフォリオ作成時にログイン画面を実装しました。
ログイン後、ユーザー情報に紐づいた処理を行うため、ユーザー情報をセッションに格納しました。ログイン → ログアウトまでの中で、セッションに格納に必要な記述をカンタンにまとめました。

##そもそもセッションとは
こちらのサイトの言葉がわかりやすいので引用します。Cookieとの違いも記載しており、わかりやすいです。

>セッションとは、コンピュータのサーバー側に一時的にデータを保存する仕組みのことです。
[PHPでセッションを使う方法【初心者向け】](https://techacademy.jp/magazine/4970)

##手順
1. ログインするときにユーザー情報を格納する
2. ログイン成功後、セッションからユーザー情報取得
3. ログアウトしてセッションを削除

ものすごく簡単に書きました。

### 1. ログインするときにユーザー情報を格納する

記載したコードはこちらです。今回私はユーザーIDのみを格納しました。
※まだローカル環境で開発中なので画面遷移

元記事を表示

[Laravel]Composerエラー 「Do not run Composer as root/super user!〜」

Composerを使ってライブラリを使ってインストールをしたとことろ以下のエラーが出ました。

“`
Do not run Composer as root/super user! See https://getcomposer.org/root for details
“`

composerを使ったインストールをrootユーザーでしようとしたため、エラーが出たみたいです。
なぜrootユーザーでインストールは好ましくないかについては以下を参照してください。
https://getcomposer.org/doc/faqs/how-to-install-untrusted-packages-safely.md

root以外のユーザーを作成します。Linuxのコマンドの`useradd`でアカウントを設定します。

“`
// rootユーザーになる
$ sudo su –

// ユーザーを追加
$ useradd -m 名前

// 追加したユーザーに移動
$ su 名前

名前$ composer コマンド
“`

これでroot以外のユーザーになったため、compos

元記事を表示

LaravelでToDoアプリを作ったときの備忘録

定期的にQiitaで記事を投稿(アウトプット)することが大事かなと思い、間違い等もあると思うが、書いていく。

下の記事を参考にToDoアプリを作る際の備忘録を残していく。
[HyperTextCandy LaravelによるToDoアプリ作成記事](https://www.hypertextcandy.com/laravel-tutorial-introduction)

## 環境
– Windows10
– Xampp
– MySQL
– PHP7
– Laravel7
– VsCode使用

## 準備
`$ laravel new ToDo`で新しくToDoプロジェクトができあがった。かんたん。
`$ php artisan serve`でロケットが出ることを確認。オッケーちゃんとできてる。

## 色々
– コントローラ作成
– マイグレーション作成
– モデルクラスの作成
– シーダーの作成
– `$ php artisan make:seeder FoldersTableSeeder`でシーダーを作成
– シーダーの中にテストデータを記述する。参考文献を

元記事を表示

プロフィールの更新履歴を保存する仕組みを作るにはどのようにしたら良いのか。手順をまとめてみた。(自分用)

#はじめに
※ Profile画面を作っていますので、profile(自分用)として色々記載しています。

実際のアプリケーション開発はある機能が1つのテーブルを使うだけで完結することは、ほとんどありません。

複数のテーブルを使ってシステムを実現します。
リレーショナルデータベースにはこのようなテーブル同士の関連を扱う機能が備わっており、
Eloquentで扱うことができます。
編集履歴は「Profileをいつ変更したか」「日付と時刻を記録し、参照することができる」機能のことです。

編集画面でデータを更新するタイミングで histories というテーブルにデータを登録し、
編集画面でその一覧を見られるように実装します。

では、流れに沿って記述していきます。

#1.編集履歴テーブルの作成と関連付け
Migrationファイルの雛形を作成します。

“`
$ php artisan make:migration create_histories_table
“`

Migrationファイルを次のように編集いたします。

“`php

元記事を表示

WordPress のタグ・クラウド・ウィジェットのフォント・サイズを変更する方法

## 問題

WordPress 標準のタグ・クラウド・ウィジェットは、フォント・サイズの指定を、以下のようにインラインで行っています。

“` HTML

WordPress
PHP
ローカルWebサーバーからSesameをそこそこ早く施錠・解錠する。

スマートロック「Sesame」を使っている人なら感じたことがあるでしょう。
クラウドにアクセスするのが遅すぎる…と。
かといってBluetoothに接続するも遅い…と。
これだったらリアル鍵を取り出した方が早いんじゃね…と。

SesameはWebAPIを公開してくれています。
なのでそれをPHPからcURLで叩いてそこそこ早く施錠・解錠したいと思います!

#準備
・SesameとWifiアクセスポイント
今このページを見ている人なら既に持ってると思いますが一応

・無線LANルーター
スマホでローカルWebサーバーにアクセスするのに要ります。

・PHPでcURLが動かせるローカルWebサーバー
構築方法はググって下さい。
IPアドレスはスマホからアクセスできるように固定しといて下さい。
自分はRaspberryPiにNginxを入れてます。WebサーバーにできるNASとかもありますし何でもいいと思います。

・SesameIDとAPIキー
下記URLを参照しSesameIDとAPIキーを取得して下さい。
[APIキー取得方法とセサミIDの確認方法](https://jp.cand

元記事を表示

PHPで、ネストの深さがわからない配列中に特定のキーが含まれているかを調べる

意外とドンピシャのコードが見つからなかったので、備忘録として書いておきます。

“`php
function hasKey($array, $key)
{
$hasKey = false;
array_walk_recursive($array, function ($eachItem, $eachKey) use(&$hasKey, $key) {
$hasKey |= $eachKey === $key;
});
return (bool)$hasKey;
}
“`

`array_reduce()` が使えるのかと思ったんですが、ネストの下層まで潜ってreduceしてくれるわけではないようでした。

元記事を表示

Google Calendar APIでイベント登録時に参加者を設定した時だけエラーになる

#環境
– PHP:7.4.7
– google/apiclient:2.7.0

#前提
– サービスアカウントのキーファイル取得済み
– G Suiteドメイン全体の委任を有効化済
– `https://www.googleapis.com/auth/calendar`スコープのアクセス許可済み
– イベント参加者は自ドメイン内の人

#症状
参加者のいるイベント登録しようとすると以下のエラーメッセージが表示される。参加者がいないと問題なく登録される。
>Service accounts cannot invite attendees without Domain-Wide Delegation of Authority.

#原因
サービスアカウントそのままでは登録できない仕様らしい。
impersonate(日本語だとユーザーアカウントの成り代わり?)が必要だった。

#サンプルコード
“`php:sample.php
/**
* @param string $calendarID イベント登録するカレンダーのID
* @param Google_Service_Calend

元記事を表示

PHPって使いづらい・・・

**愚痴を連ねた記事です。**(あくまで個人の感想です。)

#生産性低くね・・・?
とふと思いました。仕事で半年程度ですが、使った感想を書いていきます。

##PHPの特徴
PHPの特徴はWEB関係のフレームワークが多く存在し、WordPressなどもよく用いられます(WordPressはCMSですが・・・)。案件ではCAKE PHPやLaravelを用いて開発をしていましたし、WEB関係の実装はやりやすいとは感じました。

動的型付言語であり変数型をあまり考えずに変数を実装できるので、あまり頭を使わずに変数を利用できます。実際、文字列型と数値型をあまり意識せずに値を入れられるのは便利でした。

##ただ生産性がちょっとね・・・
– ロクなIDEが無い
– Eclipse、VSCode、NetBeansと使いましたが、定義ジャンプが無かったり自動インポートが無かったりと不便でした。特にVS使ってて自動インポート無いのは辛い・・・。VSStudioでは使えたのに。

– 動的型付けめんどくさ!
– 数値と文字列考えなくて良いとは言ったが、引数型は合わせないといけない

元記事を表示

SkyWayによるビデオ・音声通話の技術概要

この記事は「[マイスター・ギルド:暑中見舞!夏のアドベントカレンダー2020](https://note.com/meisterguild/n/n09826f484617)」3日目の記事です。
# 初めに...
コロナの流行が始まったとき、「Stay Home」対策で自宅に閉じ込められたとき、ITワーカーの私たちは特に自宅からリモートで仕事をすることが可能でラッキーでした。
残念ながら、私たちのほとんどはリモートでの作業に慣れておらず、最初は上司、同僚、お客さん等とリモート通信が特に困難でした。
特殊なツールを使用しても改善されましたが、同じオフィスで作業するほど自然ではありません。
弊社の[Meister Guild](https://m-gild.com/)でもその新しい作業環境に答えるツールを探して色々なツールを使ってみた:

– [Zoom](https://zoom.us/):ヴァーチャル背景を使える
– [Discord](https://discord.com/new):完全に無料
– [Remo](https://remo.co/):ヴァーチャルルームに入れる、共有ホ

元記事を表示

【Unity】UnityWebRequestで画像ファイルを送信してPHPで受け取る最小実装

UnityWebRequestで画像ファイルを送信しPHPで受け取る最小の実装を備忘録として残します。

## Unity側

前提条件として画像ファイルはバイト配列として取得している状態を作ります。

以前執筆したコチラの記事でTextureをPNGにエンコードしたバイト配列作成までを紹介しているので、参考になるかもしれません。
[【Unity】RawImageのTextureをPNGにエンコードする方法](https://qiita.com/ohbashunsuke/items/5d9b9771e33d3027fb9c)

“`cs
IEnumerator Send(byte[] bytes)
{
var form = new WWWForm();
// “file”はPHP側で$_FILESから取得するキー ex)$_FILES[“file”]
form.AddBinaryData(“file”, bytes, “image.png”, “image/png”);
var req = UnityWebRequest.Post(“http://lo

元記事を表示

【PHP・laravel】クエリパラメータを送る時まとめ(getとrequest)

初歩的なことですが、調べてもなかなか出てこなかったため、記録します。
#HTMLからPHP側に送る

“`sample1.laravel.php
送信
“`

“`sample2.laravel.php
送信
“`

php側

“`index.php
$get1 = $_GET[‘suji’];//1
$get2 = $_GET[‘moji’];//’文字’
“`

#PHP内のやり取り(関数から関数)
####数値や文字を送るとき

“`index.php
function a(){
redirect(‘/b?suji=1’);
}

function b(){
$request1 = $_REQUEST[‘suji’]//1
}
“`

“`index.php
function a(){
redirect(“/b?moji=’文字'”);
}

function b(){
$request2 = $_R

元記事を表示

Laravelのブログ開発でmarkdown対応させてみた

# はじめに
Laravelを使ってブログを開発している際に見出しや装飾を本文に反映させてみたいな
と思い、markdown対応させてみました。
至らない点がありますが暖かい目でみてやってください。

### 使用するmarkdown
Markdown Extraを使用します。
また、ライブラリは[cebe\markdown](https://github.com/cebe/markdown)を使用します。

### markdown実装
markdownの実装自体は簡単なコードで完了します。

“`convertMarkdown.php
$converter = new \cebe\markdown\MarkdownExtra();
$String = $converter->parse(“# AAA”); //

AAA

“`

### Laravelプロジェクトに組み込む
convertMarkdown.phpで使用したコードをLaravelプロジェクトに組み込みます。
今回はブログでの使用なのでブログの本文が表示される画面で反映させたいので、
記事一覧画

元記事を表示

Laravelでテーブルのcreated_at, updated_atに時刻をミリ秒単位で入れる

##初めに
PHP(laravel)の開発で、
データベースにinsertする際、created_at、updated_atの時刻を、ミリ秒(3桁)まで指定する要件があり、ネットで探しても良記事が見つからなかったのでメモ。

###1.getDateFormat()をModelに記載
例として、productsテーブルに商品を登録するという想定。

“`Product.php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
//~省略~

//この関数をモデルに追加
public function getDateFormat()
{
return ‘Y-m-d H:i:s.v’;
}
}

“`

###2.現在時刻をミリ秒単位に成型

コントローラにDBの処理を書くことはバットプラクティスかもしれませんが、
今回簡単な例としてコントローラーに下記のように記述。
*Carbonを使用

元記事を表示

OTHERカテゴリの最新記事