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

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

CakePHPのCounterCacheで関連件数を自動カウント

CakePHP には、紐づく別テーブルの件数が変わるとカウンター用カラムを自動的に更新してくれる、「CounterCache」というビヘイビアがあります。

ドキュメントにある利用例です。

> たとえば、記事のリストを表示するときに、記事のコメントの数を表示することができます。 または、ユーザーを表示するときに、彼女が持っている友人/フォロワーの数を表示することもできます。 CounterCache ビヘイビアーは、これらの状況を想定しています。
> https://book.cakephp.org/4/ja/orm/behaviors/counter-cache.html

このビヘイビアを使ってみようと思います。

# テーブルを作成

まず、テーブルを作成します。
以下のようなテーブル構成とし、記事テーブルがコメント数とタグ数のカラムを持つものとします。

* 記事:コメント = 1:N (hasMany/belongsTo)
* 記事:タグ = N:N (belongsToMany)

“`sql
/* PostgreSQL */


— 記事

CREATE

元記事を表示

Laravelのコレクションでユーザー(グループ)ごとに最新のメッセージを取得

うちでLaravelで質問回答アプリを実装しています。
対話者のメッセージボックスを作りたい、要件をまとめました:スクリーンショット 2020-06-02 6.44.49.png

ログイン中のユーザーはuser_meとし、他のユーザーごとに一番新しいメッセージを提示するメッセージリストを作りたいです。
そこでクリックしたら、そのユーザーとのメッセージモダルに飛ぶ。
ユーザー名は相手の名前、メッセージは対話中の一番新しいメッセージ(自分からメッセージのも含む)

SQLよりLaravelのコレクションはもっと使いやすいと思い、以下で案を。
まずuser_meと関わる全てのメッセージを時間順に並べて取得、

次に対話両方をグループとし、一番新しいメッセージだけ、リストにプッシュする。
リストに登録済のグループのメッセ

元記事を表示

docker上のphpコンテナでcomposer installしたら、メモリ不足で落ちた話

# はじめに
dockerでlaravelの開発していて、必要なライブラリをcomposerでインストールしようとしたら下記のエラーが出て詰まった、、、:sweat_smile:

エラーメッセージ

“`
Using version ^4.3 for laravel/socialite
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/bin/composer.phar/src/Composer/DependencyResolver/Solver.php on line 223

“`

## 原因

元記事を表示

[PHP]引数で受け取った無名関数(クロージャ)の結果の型を指定する方法

引数で受け取った無名関数の返り値が型チェックでエラーになるようにするというのが目的。

# お題

phpの引数は型指定できますが、受け取った無名関数の返り値の指定はできません。
例えば下記は配列のフィルタを行うクラスの実装例です。

“`php
values as $key => $value) {
if ($filter($value)) {
$filteredValue[] = $value;
}
}
return $filteredValue;
}
}

$arrayObj = new ArrayObj();

// a

元記事を表示

PHP7.0 × Zend Framework1でWebアプリケーションを作る

#1.PHPのインストール -XAMPP
XAMPP = ザンプ
>X:クロスプラットフォーム
A:Apatch
M:MariaDB/MySQL
P:PHP
P:Perl

PHPを用いたWebアプリケーションに必要なソフトウェア群を一度にインストールできるパッケージ。
[公式サイト](https://www.apachefriends.org/jp/index.html)からダウンロード、インストール。
(Nextをポチポチしていれば問題ないはず)

完了したらXAMPPのコントロールパネルが表示される。ここで各ソフトウェアの起動・終了を行う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248316/78df2559-281d-3454-f072-28a234dfa111.png)

**赤いエラーが出ている場合**
使用するポート番号が既に使用されている可能性。
https://norakura-jyoko.com/xampp-local-setup を参照

#2.Zend

元記事を表示

phpredisインストール時に、PHPの設定でひさしぶりにハマったのでメモ

“`
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/src/phpredis/modules/redis.so’ (tried: /usr/local/src/phpredis/modules/redis.so (/usr/local/src/phpredis/modules/redis.so: undefined symbol: php_json_decode_ex), /usr/lib64/php/modules//usr/local/src/phpredis/modules/redis.so.so (/usr/lib64/php/modules//usr/local/src/phpredis/modules/redis.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
“`

こんなエラーを見かけたら、ポイントは `php_json_decode_ex`

元記事を表示

symphonyを覚えようとしたら英語だらけだった

# はじめに
現場が2020年5月末で終りを迎えた。コロナ影響による無業期間の始まりである。ほんとうに仕事がない期間は初めてなのでちょっとドキドキするが向こう1年ほどの生活資金はある。そしていままでの人間関係を総動員して、広告系のWeb現場にいる友達(元同僚)からphpの案件にチャレンジしてみないか、と面談オファーが来た(持つべきものは酒を酌み交わした友である)。で、使われてるフレームワークがsymphonyって言われたんだけど、、、
おおん?日本語の資料がめっちゃすくねぇー!

# また英語なの!?
文句言ってるヒマはねぇや、やるしかねぇぇぇ
https://www.udemy.com/share/101WEaAkQadFdURHg=/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94562/c7c299e2-0015-16ed-9c9b-b8ad2965bf7e.png)

# Symfony
## インストール
“`terminal(ver.4.2をインストールする場合)
>

元記事を表示

【Laravel】php artisan migrateエラーへの対応 : 1 PDOException::(“SQLSTATE[HY000] [2002] Connection refused”) /Applications/MAMP/htdocs/task_test/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

#【Laravel】php artisan migrateエラーへの対応 : 1 PDOException::(“SQLSTATE[HY000] [2002] Connection refused”) /Applications/MAMP/htdocs/task_test/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

上記エラーを対応した際の内容を記録します.

## 目次
* [動作環境](#動作環境)
* [解決法](#解決法)
* [調べたこと](#調べたこと)
* [エラー原因の考察](#エラー原因の考察)

—————————————
## 動作環境
`OS : macOS Mojave 10.14.6`
`MAMP : 5.7`
`MySQL : 5.7.26`
`PHP : 7.2.31`
`laravel : v6.18.16`

## 解決法

先に解決した方法を記載します.
.envファ

元記事を表示

【PHP8.0】PHPにオブジェクト初期化子が導入される

これまで何度も[塩漬けにされたり](https://qiita.com/rana_kualu/items/98ff480a63ff1ef47153)[却下されたりしていた](https://qiita.com/rana_kualu/items/041724987393696ec926)オブジェクト初期化子ですが、ついにPHP8.0で導入されることになりました。
オブジェクト初期化子が何かというとこれです。

“`php
class HOGE{
public function __construct(
private int $x
){
// $HOGE->xが生える
}
}
“`

これはオブジェクト初期化子でいいのか?

日本語で何と表すのか適切な単語が思いつかなかったのでとりあえずオブジェクト初期化子としておきます。
愚直に訳すと”コンストラクタ引数昇格”ですが、そんな単語は無いうえに[型昇格](https://qiita.com/tokumoto/items/12a8dbcec6c39a703227)と紛らわしいです。
[引数プロパティ宣言](https://w

元記事を表示

Laravelのタスクスケジューラを使う

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

[Laravelでコマンドライン処理を行う](https://qiita.com/toontoon/items/2015ec0deea4b11e5361)
本記事は上記の内容を理解している前提で書かれています

# Commandクラス作成
コマンドラインで
`cd sample`
`php artisan make:command SampleSchedule`
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/app/Console/Commands/SampleSchedule.p

元記事を表示

【Laravel + GraphQL】Lighthouseを使ってみる【その1:チュートリアル】

[Lighthouse](https://lighthouse-php.com/4.12/getting-started/installation.html#install-via-composer)の設計思想が何もわからん&そもそもディレクティブ全然わからん状態を脱却したいので、練習として公式のドキュメントを上から順番にやっていくことにしました。

# 環境
PHP: 7.2.5
Laravel: 7.0
Lighthouse: 4.13

# チュートリアル

## デフォルトのスキーマを実行できるようにする

何はともかくインストールします。

“`
composer require nuwave/lighthouse
“`

そうしたらまずはデフォルトのスキーマを試してみましょう。

“`
php artisan vendor:publish –provider=”Nuwave\Lighthouse\LighthouseServiceProvider” –tag=schema
“`

このコマンドを実行すると以下のように`users`と`user`スキーマが生成

元記事を表示

Google Photos APIをPHPで使う

Google Photos APIを使用して、Google Photoにアクセスするアプリを作成しています。
その過程でのAPIを利用するまでを記載します。

基本的にオフィシャルのリファレンスを参照していますが、そこから読み取りにくい部分などを具体的に紹介できたらと思っております。

[Google Photos API](https://developers.google.com/photos/library/guides/get-started-php)

Laravelを使用したコードを記載していますが、Laravelに特化した部分は少ないと思いますので、
Laravel以外のフレームワークを使っている場合もご参考になればと思います。

## 準備

### Laravelプロジェクト作成
“`bash
$ composer create-project laravel/laravel googlephoto_sample –prefer-dist
“`

### Google Photos APIを有効にする
– [Google APIs](https://conso

元記事を表示

#MacでLaravelの環境構築をした件

#MacでLaravelの環境構築をした件

MacでLaravelの環境構築をした際の内容をまとめます.

# 目次
* [動作環境](#動作環境)
* [構築手順](#構築手順)
* [STEP1.Homebrewのインストール](#homebrewのインストール)
* [STEP2.Composerのインストール](#composerのインストール)
* [STEP3.PHPのインストール](#phpのインストール)
* [STEP4.Laravelのインストール](#laravelのインストール)
* [おわりに](#おわりに)

## 動作環境
`OS : macOS Mojave 10.14.6`
`HOMEBREW_VERSION: 2.2.17`
`Composer version 1.10.6`
`Laravel Installer 2.3.0`
`PHP : 7.2.31`

# 構築手順

## homebrewのインストール
Homebrewはmacのパッケージマネージャです。
パスワードを求められたらMacのログインパスワードを適宜入力して

元記事を表示

containすると全件表示されない。

DBを直接みると見れるデータが関連ターブルをcontainするとfindで取得できない時の解決法。

/src/Model/Table内の「****Table.php」を修正することで解決しました。
bakeを使ってモデルを生成したときに、joinTypeがINNERになっているのでLEFTに書き換え。

$this->belongsTo(‘Authorities’, [
‘foreignKey’ => ‘authority_id’,
‘joinType’ => ‘INNSER’,
]);

↓↓

$this->belongsTo(‘Authorities’, [
‘foreignKey’ => ‘authority_id’,
‘joinType’ => ‘LEFT’,
]);

元記事を表示

PHP Slim3フレームワークのサンプルアプリを作ろう(2-1. First Application Walkthrough Getting Set Upまで)

#はじめに
PHP Slim3フレームワークの勉強のため、
Slim公式のユーザーガイドにある[First Application Walkthrough](https://www.slimframework.com/docs/v3/tutorial/first-app.html#run-your-application-with-phps-webserver)のサンプルアプリを作成します。
まずは、ビルトインWebサーバーで表示させるところまで。

今回は、[skeleton project](https://qiita.com/erik_t/items/23cc9df2154e80aa137e)を使用しないバージョンです。

#前提
下記記事で構築した環境を前提とします。

– Windows10にVagrantをを入れてCentOS7をインストールしよう([1](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)、[2](https://qiita.com/erik_t/items/909efb63fd389f486ec3)、

元記事を表示

Laravelでメモリリーク??? 実はそんなわけなかったというしょうもない話

タイトルで若干ネタバレしてますが、ほんとしょうもない話です。ただ、おそらく同様のことで悩まれている方が何人かいるようなので、記事にしてみます。最後の方にちょっとした知見もありますが、ほぼ読み物です。

ちなみにSQSキューワーカーでメモリリークが起きるという記事がQiitaにありますが、今回の記事はこの件と直接関係はありません。

参考)
https://qiita.com/sh-ogawa/items/d64cafce2a2646b7abc6

# 単純な処理でなぜか延々と膨れ上がるメモリ使用量

Laravel 6.xでデータベース(今回はMySQLですがこの話に関係はない)に数万行のデータをインポートしようと試みたある日のことでした。CSVファイルから1000行ずつデータを読み出して1行ずつインサートするという~~手抜き~~超簡単なプログラムです([Laravel Excel](https://laravel-excel.com)を使用)。インポートプログラムが完成して数万行あるCSVファイルを食わせてバッチを実行したところ、数千行まで処理が走った瞬間に

“`
PHP Fat

元記事を表示

AWS 上の ALB の HealthChecker に 200 を返す方法

AWS 上の ALB のターゲットの Moodle で HealthChecker に認識させることはできないのは、config.php が読み込んでいる lib/setuplib.php でリダイレクトしているからで、ターゲットでは 303 になりうまくいきません。
config.php の最上部で、以下のように記述すれば、200 を返す事ができます。
コツは、lib/setuplib.php を読み込む前に処理を入れることです。

“`PHP
$http_user_agent = $_SERVER[‘HTTP_USER_AGENT’];
if (strstr($http_user_agent, “ELB-HealthChecker”)) {
echo “ok”;
die;
}
“`

元記事を表示

Laravelでコマンドライン処理を行う

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# Commandクラス作成
コマンドラインで
`cd sample`
`php artisan make:command SampleCommand`
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/app/Console/Commands/SampleCommand.phpが現れます

# Commandクラス修正
さきほど作成したSampleCommand.phpを下記に修正します

“`SampleCommand.php

元記事を表示

PHPのフレームワーク作ってみました。

# ■PHPフレームワーク(Webシステム用)の概要

久しぶりに?PHPを触る機会があったので、フレームワークを作ってみました。
コンセプトは、

– **スモールスタートできる。**
– **あんまり準備が必要ない。**
– **直感的にわかる。**

です。
なぜフレームワークを作ったかと言うと***LaravelとかCakePHPとか使いづらい、と言うか作りづらい***と思うからです。
車輪の再発明だと言われるかもしれませんが、世の中にたくさんのフレームワークが存在しているわけですし、今更1つくらい増えても問題はないでしょと思います。

ちなみに名前は、安易ですが「***WSI: Web System Infrastructure(Webシステム基盤)***」としています。

## ★Controllerを作るのは面倒
LaravelもCakePHPも、その他のフレームワークもほとんどの場合、Controllerを作成します。
Controllerで処理をした後Viewに制御を渡して、画面を表示します。

プロトタイプなど作成すると、ほとんどの場合、HTMLと紙芝居用のJava

元記事を表示

【PHP(Laravel)】ControllerからViewにデータを渡す2つの方法

## 概要
1. ビューメソッドを使用してデータを渡すビューを指定する。
2. データを渡す。(方法2つ)

## 1.ビューメソッドを使用してビューを指定する
例)articlesコントローラーのindexファイルを指定する

““
return view(‘articles.index’)
““

## 2.データを渡す。(方法2つ)

データが入った変数 $articles をビューに渡す。

1.Withメソッドでデータを渡す。

““
return view(‘articles.index’)->with([‘articles’ => $articles]);
““
2.Compact関数でデータを渡す。

““
return view(‘articles.index’, compact(‘articles’));
““

元記事を表示

OTHERカテゴリの最新記事