- 1. Call to undefined method App\Xxxx::mapInto()
- 2. Dockerを使ってLAMP開発環境を整えるまでの奮闘記
- 3. laravel入門! bladeの作り方(extends,yield,section)
- 4. 【備忘録】phpMyAdminでデーターベースにアクセスできるようにする
- 5. Laravel Collection型の配列変換 toArray と all の違い
- 6. 【PHP8.0】StartsWith/EndsWithがPHP本体に実装される
- 7. 【初心者向け】Amazon Connectの構築からOutbound APIを叩いて電話を発信するまで
- 8. 本番環境でエラーが出た時のメモ(FuelPHP)
- 9. Laravel7のユニットテストで、base_path()などのヘルパー関数が使えない問題
- 10. PHPでPDFを出力する
- 11. 【Laravel】クエリビルダやeloquentでつくったクエリをCLIで実行する方法
- 12. 【初心者向け】LaravelのBladeで良く使用するディレクティブ9選
- 13. 【PHP】abstarct、traits、interfaceについて
- 14. 【PHP】可変長引数とは
- 15. 【PHP】二項演算子と三項演算子の違い
- 16. 【PHP】クロージャの引数とuseの違い
- 17. Laravel ユニットテスト用メソッド
- 18. 【Laravel】Carbonクラスはイミュータブルにできる
- 19. 【Laravel】リポジトリパターンのディレクトリ構造のメモ
- 20. 【PHP】Allowed memory size of *** bytes exhaustedエラーの対処法まとめ
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