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

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

Call to undefined method App\Xxxx::mapInto()

先日、LaravelでのAPI出力をするために、こんなコードを書いたら、エラーが出てしまいました。
(この時点で、突っ込みどころ満載ですが諸事情によりこれにしてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321589/1bdc810e-6754-a69f-a1a7-fae631e4e56a.png)

“`PHP:Api\PostController

元記事を表示

Dockerを使ってLAMP開発環境を整えるまでの奮闘記

Dockerを使ってPHP+MySQLの試験環境を作るために、どうしようもなく転びまくった記録です。
ほかの時期だったり、使えるもののバージョンが変われば、また違った展開になると思います。

2020年5月時点で利用可能なDockerの最新版を使うべくアノ手コノ手でインストールに至るまでの一例です。

##最終的にどうなったか
AWSのEC2にあるFaro Sourceというところが提供するOptimized AWS CentOS 7.6.2 (X86, 64bit)を使いました。
このインスタンスはインスタンス料金とは別にソフトウェアライセンス料金がかかるようですのでご注意くださいまし。
本当にタマタマこの組み合わせでうまくいっただけで、それ以上何も感想はないです。

##いろいろ使ったもの
開発端末OS Windows10 Pro 64bit
Docker for Windows 2.2.0.5
Virtual Box 6.1.6
vagrant 2.2.7
Vagrantで使ったホストのイメージ bento/centos-7.5
AWS EC2で使ったホストのイメージ Optim

元記事を表示

laravel入門! bladeの作り方(extends,yield,section)

laravelではHTMLではなくbladeというものが使われます。
bladeはテンプレートエンジンというもので、HTML+PHPを書きやすく、そして見やすくするためのもの(すごくざっくり言うと)。

そのbladeを書くにあたって、いろんな構文を使うから特に覚えておきたいものをメモしておきます。
僕の特に覚えておきたいものは、**extends,yield,section** の3つ。
この3つは、ビュー(bladeで作成したファイル)のレイアウトを共通化して、使い回しがしやすいようにするための構文。

#今回使うファイル

・app.blade.php(親)
・index.blade.php(子)

という2種類のファイルを使っていきます。
app.blade.phpというのがブラウザ上に表示させるファイルの、雛形となるもの。親ファイル。
index.blade.phpの方が、app.blade.phpを引き継いで、雛形を具体化(?)させたファイル。

どちらもviewsというフォルダに入っている前提です。
階層的にはこんな感じ。

“`
laravel\resouces

元記事を表示

【備忘録】phpMyAdminでデーターベースにアクセスできるようにする

#目的
phpMyAdminでデーターベースにアクセスできるようにする

phpMyAdminはPHPで動いているので、まずはPHPを入れる

#PHPをインストール
何が必要か分からないので、一旦下記のコマンドで全部入れる。

“`
yum install php* -y
“`

#phpMyAdminをインストールする。

まずはphpMYAdminを置くところに移動する。

“`
cd /var/www/html/
“`

phpMyAdminをインストールする。

“`
wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-
4.0.10.20-all-languages.zip
“`

以下のコマンドでZipファイルを解凍して、ファイル名を分かりやすい名前に変える。

“`
unzip phpMyAdmin-4.0.10.20-all-languages.zip
mv phpMyAdmin-4.0.10.20-all-languages phpmyadmin
“`

#config.

元記事を表示

Laravel Collection型の配列変換 toArray と all の違い

LaravelのCollection型を配列に変換する方法は `toArray` と `all` の2つの方法があります。
どういった違いがあるのかどちらを使えばいいのかについて調べてみました。

## 環境

– PHP 7.4.5
– Laravel 7.9.2

## tinkerで動作確認

“`php
$ php artisan tinker

>>> App\User::get()
=> Illuminate\Database\Eloquent\Collection {#3199
all: [
App\User {#3200
id: 1,
name: “Reese Kozey”,
screen_name: null,
email: “alda41@example.org”,
email_verified_at: “2020-05-01 16:25:47”,
api_token: null,
created_at: “2020

元記事を表示

【PHP8.0】StartsWith/EndsWithがPHP本体に実装される

先日PHP8で[str_containsが導入される](https://qiita.com/rana_kualu/items/cb758cdc21d60e632491)ことが決まったばかりですが、さらにもっと直接的な『〇〇で始まる』『〇〇で終わる』関数までも導入されることになりました。

[Add str_starts_with() and str_ends_with() functions](https://wiki.php.net/rfc/add_str_starts_with_and_ends_with_functions)というRFCが投票中です。
2020/05/04時点では賛成50反対4で、ほぼ導入確定です。

# PHP RFC: Add str_starts_with() and str_ends_with() functions

## Introduction

・`str_starts_with`は、文字列が指定の文字列で始まるか否かをチェックし、結果をbool値で返します。
・`str_ends_with`は、文字列が指定の文字列で終わるか否かをチェックし、結

元記事を表示

【初心者向け】Amazon Connectの構築からOutbound APIを叩いて電話を発信するまで

[4月に転職](https://qiita.com/duplicate1984/items/6baca75645434cb074e5)して2週間目でAmazon Connectの構築、CCPのカスタマイズを担当することになりました。
時勢のため在宅のコールセンターを構築したい、などの理由で需要が上がっているようです。

といってもいきなり本番環境で構築ができるわけでもないので、
一旦テスト用のアカウントで構築からAPI叩くところまでやってみることにします。

ちなみにこの時点ではAWSもPHPもLinuxも初めてです。
タイトルの通り初心者向けですが、そもそも私が初心者です。

#構成
 今回の構成は以下の通りで、
 ゴールは「EC2上に作成したPHPスクリプトからAmazon Connect APIを叩いて、指定した電話番号に発信するところまで」とします。

+ AWS EC2 Linux
+ PHP 7.2
+ AWS SDK for PHP 3

#Amazon Connect側の設定
まずはAmazon Connectを設定していきます。

###Amazon Connec

元記事を表示

本番環境でエラーが出た時のメモ(FuelPHP)

「FuelPHPをやるぞやるぞ」と意気込んで、環境構築につまづき1年くらい放置して、それから「やるぞやるぞ」と再燃して、燃え尽きかけた時のお話。
たぶん、この後も燃え尽きかけると思うので、将来のために備忘録を。
[すごそうなメモ](https://qiita.com/TakashiOshikawa/items/6d78735fbe9e2155e797)もあったので共有。

#db.phpに書くべき2種類
ポイントは「mysqli」と「PDO」のどちらの接続でも大丈夫なように書いておくこと?
[公式ドキュメント](http://fuelphp.jp/docs/1.6/classes/database/introduction.html)には2つのドライバで接続…とか書いてあった。

“`php:fuel/app/config/db.php
return array(
‘default’ => array(
‘type’ => ‘pdo’,
‘connection’ => array(
‘dsn’ => ‘mysql:host=XXX;db

元記事を表示

Laravel7のユニットテストで、base_path()などのヘルパー関数が使えない問題

makeコマンドでユニットテストを作成すると非常に便利ですね。

“`
php artisan make:test MySampleTest –unit
“`

ただこのコマンドで作成したクラスのではbase_path()やfactory()などのヘルパー関数が利用できません。
ユニットテストを実行すると、以下のように怒られてしまいます。

“`
1) Tests\Unit\MySampleTest::testExample
Error: Call to undefined method Illuminate\Container\Container::basePath()
“`

原因は、テストクラスがフレームワークを読み込んでいないからです。
以下のようにlaravelのTestcaseクラスを読み込むようにすれば問題が解消します。

**変更前**

“`
use PHPUnit\Framework\TestCase;

class MySampleTest extends TestCase
{
“`

**変更後**

“`
use Tests\TestCase;

元記事を表示

PHPでPDFを出力する

今回使うライブラリは、既存のPDF文書をテンプレートとして引用できるので、静的なレイアウト作成や細かい調整などはwordやExcelで行うことができます。
動的なデータに関しては、座標指定で配置可能です:grinning:

##ライブラリとフォントをダウンロードする
– [TCPDF](https://github.com/tecnickcom/tcpdf)
PDFを作成して書き込みができるライブラリ
– [FPDI](https://github.com/Setasign/FPDI)
既存のPDFを読み込めるライブラリ
– [明朝フォント](https://ipafont.ipa.go.jp/node193#jp)

それぞれ解凍して、任意の場所に配置してください。
(あとでパスを指定すればいいのでどこでもOK)

##実際のコード

“`php

元記事を表示

【Laravel】クエリビルダやeloquentでつくったクエリをCLIで実行する方法

SQLの生の文をmysqlworkbenchとかで実行して、どんなデータが取得できるのか確認したい、、、!けど、クエリビルダで書いちゃったから書き換えないといけないじゃんめんどくさ!!!ってなってる人がいたので、そういう時に書き換えないでいい方法を紹介します。
結論から言うとコマンドラインから**php artisan tinker**コマンドが便利です!

artisanコマンドを実行できるのはプロジェクト直下のディレクトリのみなので、そこに移動してください。

そこで

“`shell
php artisan tinker
“`
これを実行しましょう。
入力ができるようになります。(対話モード)
ここで例えば

“`php
DB::table(“table”)->select(“name”)->where(“id”,”=”,”20″)->get();
“`
このようにクエリを投げればその結果を返してくれます。他にも

“`php
$tmp = 10;
“`
のように代入してやるとこの変数をしようしてやることもできます。

“`php
DB::table(“tabl

元記事を表示

【初心者向け】LaravelのBladeで良く使用するディレクティブ9選

## ディレクティブとは

Bladeでは、ディレクティブというLaravelの機能を使用することができます。この機能は、PHPの構文の役割を果たします。

## 良く使用するディレクティブ9選

1) “`@php “`

PHPのスクリプトを記述することができます。

“`index.blade.php
@php
// PHPのスクリプト
@endphp
“`

2) “`@if“`

条件式が真(true)だと実行されます。

“`index.blade.php
@if (条件式)

@elseif (条件式)

@endif
“`

3. “`@unless“`

条件式が偽(false)だと実行されます。

“`index.blade.php
@unless (条件式)

@endunless
“`

4. “`@empty“`

変数が空だと実行されます。

“`index.blade.php
@empty (変数)

@endempty
“`

5. “`@isset“`

変数が定義されいていると実行されます

元記事を表示

【PHP】abstarct、traits、interfaceについて

引き続きPHPの中で、見慣れないものが新しいプロジェクトの中で出てきました。クラスの修飾?っていうのだろうか
これらをまとめてみました

## abstract

“`php
abstract class AbstractClass
{
// 拡張クラスにこのメソッドの定義を強制する
abstract protected function getValue();
abstract protected function prefixValue($prefix);

// Common method
public function printOut() {
print $this->getValue() . “\n”;
}
}

class ConcreteClass1 extends AbstractClass
{
protected function getValue() {
return “ConcreteClass1”;
}

public function prefixVal

元記事を表示

【PHP】可変長引数とは

先日以下のような関数を見て困惑しました

“`php
function example(string …$a): string
“`

このカンマ3つは…?
自分が使ったことのないものだったので、調べたところ可変長引数といって、**引数の個数を変更してくれる**機能を持つそうです

今回の場合、引数が一つですが何個あっても問題ないです。足りていてなくても、多すぎても問題ないと
では数が異なっている場合、その値は関数内でどうやってつかえばいいのか??

“`php
function example(string …$a): string
{
echo $a[0];
echo $a[1];
echo $a[2];
}
“`

シンプルに引数が配列になっていて、以上のように取り出せるようです。便利ー

また逆のようなこともできるようです。つまり、呼び出すときに使う方法です。

“`php
function example2($a,$b,$c): string
{
echo $a;
echo $b;
echo $c;
}

元記事を表示

【PHP】二項演算子と三項演算子の違い

そもそも二項演算子というものが存在しているということを知らなかった。。。
ただしPHP7からでないと使用はできないので注意

## 三項演算子
“`php
echo isset($a) ? $a : ‘hello world’;
“`
これだと?より左がbool型が入ってきて、trueだと:の左、falseだと右が出力される

## 二項演算子
“`php
echo $a ?? ‘good bye’;
“`

?が2つ登場
これで$aという変数に値が格納されているかどうかをチェックした上で、trueなら$aを出力falseなら??以降が出力となりますね。
まあissetのときはこれも使えるといった感じかと。

ただ、三項演算子はともかく二項演算子は知らない人も結構多いような。。。
可読性をとるかコードのシンプルさをとるか、みたいな話ですね

元記事を表示

【PHP】クロージャの引数とuseの違い

クロージャって概念、難しい
無名関数という概念で、その名の通り名前のつかない関数のことです。
Laravelの関数の中とかでも使う機会があったりしますね。

それを使うにあたって必ず理解しておかないと行けないのがuseの使い方です

“`php
$value = 10;
$result = array_map(function($e) use($value){
return $e * $value;
}, [5, 10]);
“`

array_map関数を例とします。
第一引数に関数をおき、第2引数の配列のすべてを関数に適用させるみたいな話ですね。
この場合だと引数$eにarray_mapの第2引数が入っていく感じになります。
そして**useはクロージャの外で使われている変数をクロージャの中で使いたいとき**に使用します。
なので、クロージャの中で新しく変数を設定するときなんかは使わなくていいですね。

useは下手すると大量になってしまうかも。。。
そんなときはオブジェクトか配列に格納してやることで、ひとつだけに抑えるみたいな技もできるそうです

[PHPでクロージャのus

元記事を表示

Laravel ユニットテスト用メソッド

#前提
Laravelのテスト用メソッドについてメモしていきます。

#本題

###ステータスのチェック

“`
$this->get(‘/’)->assertStatus(200);
“`

###ステータスOKのチェック

“`
$this->get(‘/hello’)->assertOk();
“`

###POSTのチェック

“`
$this->post(‘/hello’)->assertOk();
“`

###パラメータを指定する

“`
$this->get(‘/hello/1’)->assertOk();
“`

###存在しないページのチェック

“`
$this->get(‘/hoge’)->assertStatus(404);
“`
※用意していないアドレスを指定し、ステータスコードが404かどうかをチェック。
不用意に「存在しないはずのページにアクセスできてしまう」といったことを確認できる。

###コンテンツに含まれるテキスト

“`
$this->get(‘/hello’)->assertSeeText(‘Index’);
“`

元記事を表示

【Laravel】Carbonクラスはイミュータブルにできる

Laravelでコードを書いていて、時間を取り扱う際にはCarbonクラスを使うと便利です。
が、Carbonクラスはミュータブルなので問題が発生しやすかったそうです。
Laravelの5.8より、イミュータブルなクラスとして実装できるようになりましたので、そちらが推奨されております。

## そもそもミュータブルってなんだっけ

なんか時々聞いて理解するもしばらくたってもう一回見ると忘れてしまう単語なんですよね。。
ミュータブルとは**変更可能**っていう意味です。イミュータブルは逆に**変更不可**

PHPでも定数にいれた場合は基本的にイミュータブルですよね

“`php
const immutableVariable = ‘example’;
“`

あとdefineでも定義可能ですね

[PHPの「define」と「const」の違い](https://qiita.com/schrosis/items/485b984e05b2eb4521b4)

## Carbonクラスがミュータブルだと何が問題なのか

簡潔に書くと、変更が可能なので、**用意した日時の値が思いもよ

元記事を表示

【Laravel】リポジトリパターンのディレクトリ構造のメモ

最近入ったプロジェクトがリポジトリパターンを採用していたので、メモ。
そもそもリポジトリパターンってなんなのかって話ですけど、**DBや外部APIなどの外部から取得してきたデータの操作を複数のレイヤーに分けて実装していく**というスタイルです。
自分が以前いたプロジェクトでは、DBの取得もビジネスロジックの実装もぜーんぶコントローラの中でやるっていう方針でした。これだと、初心者からするとわかりやすいんですが保守性が著しく低くなるっていうデメリットがあります。
逆にリポジトリパターンを採用すると初見殺しになっちゃうけど、長期的にみると保守性が高くなるっていう感じですね。
またこれはドメイン駆動設計(DDD)の一部でもあります。

今回はLaravelのディレクトリに落とし込んでメモをとっておきます。

参考
[Laravel リポジトリパターンの実装](https://qiita.com/bmf_san/items/c8d7b38b5f1f5747c2fd)

## Service

serviceディレクトリの中にはビジネスロジックを記述していきます。
普段のMVCだと、MのModel

元記事を表示

【PHP】Allowed memory size of *** bytes exhaustedエラーの対処法まとめ

Allowed memory size of 134217728 bytes exhaustedエラーって時々みます。これはphpに割り当てられたメモリが全部使われちゃったよ〜っていうエラー。これはプログラムだけの問題ではない可能性が高いので、幾つか対策をしなければいけません。その対処法を5つまとめました。

1. php.iniの設定
2. メモリが枯渇しないようなコードに
3. スワップの設定
4. ini_set関数で一時的にメモリ上限を上げる
5. unsetを駆使する

## php.iniの設定を変える

ちなみに冒頭にある134217728 bytesは128MBの意味です。
初期設定ではphpに割り当てられているメモリ容量は128MBとなっています。
これはphp.iniというファイルで設定されており、変更可能です。
ただ、もちろんですがサーバーのスペックを超えた設定を行うことはできません!これ超えて設定したらどうなるんだろう。。

ちなみにphp.iniの場所、自分でもよく忘れるので探し方を解説してくれているページを貼っておきます。

[もういい加減覚えよう。ph

元記事を表示

OTHERカテゴリの最新記事