- 0.0.1. CakePHPの始め方(Mac)を理解したい
- 0.0.2. テスト駆動開発をPHPで写経-第2章
- 0.0.3. ModelクラスからQueryBuilderクラスを分離させる
- 0.0.4. セッションを確認する
- 0.0.5. 【メール送信自動化】データベース内のメールアドレスを抽出して自動送信
- 0.0.6. Laravel 日付データから年度を取得し配列に入れる
- 0.0.7. PHPで年度を取得する~DateTimeとCarbon~
- 0.0.8. phpでcsvファイルを読込み配列に格納するまでの速度
- 0.0.9. jQueryとphpを使い、WordPressの絞り込み検索結果をページ遷移なしで表示する
- 0.0.10. Creating default object from empty valueというエラーの原因
- 0.0.11. 自動デプロイ(手抜き編)
- 0.0.12. Laravel-excel を使い、非同期でインポートする
- 0.0.13. PHP/Laravel で作成したプロジェクトをAWSにデプロイ
- 1. 前提
- 2. PHP7.2のインストール
- 3. Mysqlのインストールと動作の確認
CakePHPの始め方(Mac)を理解したい
先日頑張って[CakePHPのインストール](https://qiita.com/nanatsu/items/210b6448cfdc9f2bddab)をしました
次はCakePHP開発の始め方をお勉強します
スーパーしょしんしゃなので当たり前のこともいちいちメモしています# 環境状況
– Mac OS Catalina 10.15.2
– HomebrewでApache, MySQL, PHPをインストール済み
– Apache(バージョンは後日記述)
– MySQL 8.0
– PHP 7.3
– CakePHP 3.8# 調べてわかったこと
– フレームワークを使うには**MVCモデル**を理解しないといけない[^1]
– そもそも「PHPでできること」として具体的な処理や機能がいろいろある
– `bake`コマンドというやつで楽できそう# 基礎知識
整理してたら全部長くなったので切りました– [PHPについて](https://qiita.com/nanatsu/items/aec7286fc344f3a380b1)
– [MVCモデル
テスト駆動開発をPHPで写経-第2章
PHPで[テスト駆動開発](https://amzn.to/37nji9B)を写経してみたのでその記録です。
本記事では第2章のみ紹介します。過去記事
– [「テスト駆動開発をPHPで写経-第1章」を編集 – Qiita](https://qiita.com/drafts/bfab34403afbb02c814a/edit)# 所感
今回はほぼテキスト通りに行えました
# 実施
Dollarオブジェクトの状態が変わらないことを期待するテストに修正
“`diff
diff –git a/tests/MoneyTest.php b/tests/MoneyTest.php
index b753708..d47dc01 100644
— a/tests/MoneyTest.php
+++ b/tests/MoneyTest.php
@@ -8,7 +8,9 @@ require_once(dirname(__FILE__).”/../src/Dollar.php”);
class MoneyTest extends TestCase {
public fun
ModelクラスからQueryBuilderクラスを分離させる
#概要
LaravelだとGlobalScopeを作成して、scopeメソッドをModelクラスから分離させることができる。しかし、Eloquentに依存してしまうため、DBファサード等を使用してQueryBuilderのみを使用する場合に、クエリの分割ができない。
そのため、`Illuminate\Database\Query\Builder` クラスを継承したQueryBuilderクラスを作成し、EloquentからでもQueryBuilderのみでも利用できるようにする。
#実装
## QueryBuilderクラスの作成`Illuminate\Database\Query\Builder`したクラスを作成する。
“`php
セッションを確認する
新しいタブを開いてもセッションは同じになるということを今日知りました。
実際にコード書いて確かめてみました。以下を参考にしました
https://itsakura.com/php_session##ソース
https://github.com/hinamomo/laravel60-quickstart-basic/commit/9812659ed29a5766362b61778a5d9e04617dca09
この記事用に追加したのは以下2箇所(コントローラ新規作成、ルート追加)です“`app/Http/Controllers/SessionController.php
【メール送信自動化】データベース内のメールアドレスを抽出して自動送信
とあるお仕事で「ある条件下のお客様のみ、1日ごとに違うメールを自動配信して欲しい」との依頼があったので、PHPでスクリプトを書いてみました。
以下、それのサンプルです(参考サイトがいくつもあります。あとで追記いたします)。
流れとしては、
①$db -> query(“SQL文”); で必要なデータを検索(WHEREとかを使う)
②while + fetchArrayでメールアドレスを配列化
③配列にしたメールアドレスをforeachで一つずつ送信です。それだけです。
“`
Laravel 日付データから年度を取得し配列に入れる
## やってみた
**`date`カラムから年度に変換し、重複を削除、ソートしました。**
“`php:StatusContoller.php
$dates = Status::pluck(‘date’);
foreach ($dates as $date) {
$array[] = $date->subMonthsNoOverflow(3)->format(‘Y’);
}
$years = collect($array)->unique()->sort();dd($years);
“`**取得結果**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308965/5a13a41d-7174-f279-f67c-6410c2aadeb3.png)**プルダウンに年度を表示させたい場合**
“`php:index.blade.php
PHPで年度を取得する~DateTimeとCarbon~
##やりたいこと
DateTimeクラスとCarbonライブラリそれぞれ、任意の日付から**年度**を取得します。**一般的な年度(4月1日~翌年3月31日までを年度)とします。**
※2019年を例にすると、2019年4月1日から2020年3月31日までのことを指します。## DateTimeクラス
“`php
$date = new DateTime(‘2020-03-1’);
dump($date->modify(‘-3 month’)->format(‘Y’)); // 2019
“`## Carbonライブラリ
“`php
use Carbon\CarbonImmutable;$carbon = new CarbonImmutable(‘2020-03-1’);
dump($carbon->subMonthsNoOverflow(3)->format(‘Y’)); // 2019
“`間違ってる記載がありましたら教えていただけると嬉しいですm(__)m。
## 参考文献
この記事は以下の情報を参考にしました。
– [[#php]年度を
phpでcsvファイルを読込み配列に格納するまでの速度
file()を使用する場合とfgetcsv()を使用する場合で速度を比較した。
レコードは数値のみの想定。今回試したレコード数は10240件。“`:csvファイル
11.11,11.11
22.22,22.22
…
“`# file()を使用した場合
かかった時間:0.0099518299102783“`php:file()
$time_start = microtime(true);$data = array();
$cnt = 0;
$lines = file(‘timetest.csv’);
foreach($lines as $line){
$arr = explode(‘,’ , $line);
$data[$cnt][‘hoge’] = $arr[0];
$data[$cnt][‘fuga’] = $arr[1];
$cnt++;
}
$time = microtime(true) – $time_start;
echo “{$time} 秒”;
“`# fgetcsv()を使用した場合
かかった時間:0.031
jQueryとphpを使い、WordPressの絞り込み検索結果をページ遷移なしで表示する
忘れないように自分用メモを残します。
おそらくWordPressに限定せずとも
phpで同じようにdataを返してやればいろいろな結果を返せると思われます。
※絞り込み検索については既に実装している前提です。“`
function getData(){
//フォームの値を.serialize()で変数に格納
var params = $(‘form’).serialize();
$.post(
//絞り込み検索を定義してあるPHPファイルにフォームの値を渡す
“search.php?” + params,//search.phpからの値を取得し、指定要素に出力
function( data ) {
//.view内にsearch.phpの結果が出力される
jQuery(‘.view’).html(data);
}
);}
“`
`getData()`はonclickなどのイベントハンドラで適当なボタンに実行させ
Creating default object from empty valueというエラーの原因
## 背景
Laravelで更新機能を作っており更新ボタンを押すとこのエラーに遭遇した。“`
Creating default object from empty value
“`![スクリーンショット 2020-01-27 16.37.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223280/4e71729c-ad4d-632d-2818-863d23ff3427.png)
### 該当コード
“`:PostController
$post->user_id = auth()->id();
$post->title = $request->title;
$post->clearTime = $request->clearTime;
$post->save();
“`## 原因と解決方法
$postのクラス宣言をしていないため。“`
$post = new Post; #追加
$post->user_id = auth()->id();
$post->title =
自動デプロイ(手抜き編)
# やりたいこと
git pullでデプロイしている時に、gitへのプッシュをトリガーに自動でpullさせる# 前提
* “`git pull“`はSSHユーザで実行する(以下、SSHユーザを“`my-ssh-user“`とする)
* CloneはSSHのプロトコルで行う
例) “`git clone git@github.com:user/repo.git“`
* Nginx & PHP 環境
* gitにwebhookの機能がある# 手順
## 1. sudo で nginxユーザにmy-ssh-userユーザでgitコマンドを実行する事を許可する“`diff
# visudo
+ nginx ALL=(my-ssh-user) NOPASSWD:/usr/bin/git
“`## 2. webhook.php をドキュメントルート直下に配置
“`
Laravel-excel を使い、非同期でインポートする
# Laravel-excel を使い、非同期でインポートする
実装段階でかなりハマったポイントがあって苦労したので、共有しようと思います。
## 要件
1. Queue を利用し、完了時にメールで通知する。
2. 特定のレコードが登録できなかったとしても、処理を続行する。
3. バリデーションで不正なデータを弾き、エラーレポートを出力する。
4. 同じファイルをアップロードした場合には、 レコードは上書き処理をする。ハマったのは最後の3,4です。
## 環境
– Nginx + php-fpm
– PHP7.3
– MySQL 5.7
– Laravel-excel 3.1## laravel-excel
[laravel-excel Github](https://github.com/maatwebsite/Laravel-Excel)
## Horizon インストール
[Horizon](https://readouble.com/laravel/5.8/ja/horizon.html)
## routes/web.php
“`php
Rout
PHP/Laravel で作成したプロジェクトをAWSにデプロイ
前提
・ローカルで開発したプロジェクトをすでにgithubにプッシュ済み
・EC2にSSH接続できている事PHP7.2のインストール
““`
$sudo yum install -y \
php72 php72-devel php72-fpm php72-gd php72-mbstring \
php72-mysqlnd php72-pdo \
php72-xml php72-jsonインストール済みを確認
$sudo yum list installed | grep php72
““Mysqlのインストールと動作の確認
“`
インストール
$sudo yum -y install mysql56-server mysql56-devel mysql56スタート
$sudo service mysqld start動いているか確認(runnning)になっていればOKです。
$sudo service mysqld status
mysqld (pid ) is running…
`
【Laravel6.8以降】認証関連のリダイレクト先の設定変更がDRYになったよ
## TL;DR
Laravel6.8以降では認証関連のコントローラーの`RedirectTo`プロパティ等の内容について、個々のクラスで持つのではなく、`RouteServiceProvider`の定数`HOME`に集約されました。
## Before
“`php:app/Http/Controllers/auth/LoginController.php
【徒然なるままに】2020年最新、WEB技術の勢力図を三国志にしてみた
### 今は昔
一昔前はTwitterのScala/FacebookのReactが猛威を振るっていた時期がありましたが、
イキリ勢力の消耗戦で、最近はVue勢がかなり盛り上がっている印象を受けます。### かつてのJQuery、それがVue
そんな予感がひしひしとします。
そこで、最新のWEB勢力図を三国志風にしてみました。
三国志の知識はマンガとゲームとWikiです、すみません。全く知らないキッズは中田さんのYoutube大学をご覧ください。
[【三国志】第一話〜英雄たちの夜明け〜ついに授業リクエストNo.1の超大作](https://www.youtube.com/watch?v=LLvH6Flstz4)![三国志a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533968/ccda7b9e-3205-7487-038b-3500cd8f0332.png)
### 魏
– 曹操(PHP) … 何でもあり最強、女を侍らせる。
– 夏侯惇(Laravel) … ロマンチスト
– 司馬
PHPでお問い合わせフォームを作る その3 入力チェック
#はじめに
この**お問い合わせフォームを作ろう**シリーズですが、[第1回](https://qiita.com/hotate_chan/items/b8ac6b270eac50b0b8e2)は最低限のデータ引き渡しが出来るようにしました。
[第2回](https://qiita.com/hotate_chan/items/dc95f9880f6a1dfa3490)ではPHPファイルとhtmlファイルを分けるようにしました~~なんちゃってテンプレート~~。で、第3回は何をやるかというと、入力画面で入力されたデータのチェックを行おうと思います。
##入力チェックとは
まずは画面とデータの流れをざっくりと確認しましょう。
![Qiita](https://p79.tr0.n0.cdn.getcloudapp.com/items/NQuvmzeY/aaaa.png?v=ace47e289d63181c8a970eb060562d57)上図のように画面は「入力画面」「確認画面」「完了画面」という風に進んでいきます。
確認画面から入力画面に戻ることも考えなければいけませんが、今時
Incoming Webhookを使ったSlack通知ライブラリを作った
# Incoming Webhookを使ったSlack通知ライブラリを作った
おはこんばんにちは!和尚です:open_hands:今日は初めてPHPの自作ライブラリをcomposer化までしてみました!
手順をざっくり書いて、作った自作ライブラリについての使い方を説明していくーーー!:cherry_blossom:## 経緯
そもそも何故、今更Slack通知のライブラリを作ろうと思ったのかについて軽くお話させていただきたい:point_up:今年からチャットサービスをSlackに乗り換えるぞ!という会社の方針で、以前チャットワークAPIを使って問合せ通知やらエラー監視ツールの通知やらをチャットワークに送っていたのですが、それらをSlackに移行しなければいけなくなってしまいました。
簡単に使えて便利なPHPのライブラリがあればよかったのですが、Slackの通知の仕組みが去年変わってしまっていて軒並み使えなさそうなライブラリたち…。とはいえ新しい仕組み自体もチャンネル毎にWebhookを使って通知するといった大したものではなかったのでPHPの自作クラスを作って対応しま
VSCodeにPHP_CodeSnifferを導入する。
## VSCodeにPHP_CodeSnifferを導入する。
VSCodeにPHP_CodeSnifferを導入する方法を記事にしていきます。
### 何ができるようになるのか
PHPのコーディング規約違反(PSR違反)をエディタ(VSCode)で視覚的に確認できるようになる。### 下準備
`Homebrew`をインストール
[Homebrew公式サイト](https://brew.sh/index_ja)### 手順
1. 拡張ツール、`phpcs`をVSCodeでインストールする。
※ 下記スクショ赤下線部参照
![be378075.png](:storage/6bcbd256-fcc0-432e-88b8-68ace02dad43/be378075.png)
2. 以下
Laravelのサービスコンテナのバインドと解決の仕組みが知りたい!
#はじめに
Laravelについて勉強しているなか、自分はふと
「Laravelでは、bindとかmakeを使って手軽にインスタンスの受け渡しやインスタンスの利用ができて便利だけど、その仕組みはどうなっているんだろ?」
と感じました。
そこで、実際にbindなどのバインドの仕組みとmakeなどの解決の仕組みについてLaravelのコードを見て調べてみました!(個人的な事情によりLaravel5.5のコードを見て調べました。)#本題
##バインドと解決の大まかな仕組み(というかこの記事の結論)
バインド(というかbindメソッド)の大まかな仕組みは、
`bindメソッドの第一引数をキーとして、第二引数をクラスのインスタンスやクロージャとなるキーの値としてLravelであらかじめ用意された配列にセットする`というものです。
そして解決(というかmakeメソッド)の大まかな仕組みは、
`bindメソッドでセットした配列のキーと同じ値がmakeメソッドの第一引数にセットされたとき、そのキーに対応するインスタンスやクロージャを返す`というものです。
今度は実際のLaravelのコード
各言語で、継承の挙動はかなり違うという話
## はじめに
この記事は、私が色んな言語でひたすら似たようにクラス継承を書いてみて、実際にどんな値が出力されるのかを調査した結果をまとめたものです。時には既知の言語でも「こんな文法あったんだ」と思いながら、時にはHello Worldから頑張りました。
まとめるのが大変だった割に誰得?という内容ですが、同じことが気になった人のために置いておきます。
いやでも新しい発見があるかもしれないのでとりあえず読んでみてください。
意外と面白い結果になったかもしれません。## 調べた言語
– 静的型付け
– Java (Corretto 1.8.0_232)
– C# (3.4.0)
– C++ (11.0.0)
– Scala (2.13.1)
– Kotlin (1.3.61)
– Swift (5.1.3)– 動的型付け
– Python (3.7.1)
– Ruby (2.6.5)
– PHP (7.1.32)
– JavaScript (node v12.14.1)– オプショナルな静的型付け
– TypeScript (3