- 1. 【デザインパターン】PHPでTemplate Methodパターンの実装をしてみた
- 2. 関数の中で関数を出力
- 3. 【PHP8】厳密なswitch文ことmatch式が使えるようになる
- 4. 【Laravel】Carbon Data Missingエラーの対処
- 5. [PHP]公式のDockerコンテナにphp-redisをインストールする
- 6. PHPStormなら、「あ〜これ別のメソッドに切り出したいな〜」ってときに一瞬でした
- 7. Laravel 現在のマイグレーションを管理しているテーブルを確認する
- 8. Laravelでの画像アップロード
- 9. PHPでDBから配列を取り出し、jsに渡して、chart.jsでグラフ作成
- 10. foreachで配列を更新する場合の注意(unsetを付ける)
- 11. Laravel 7.16.1 での409エラー
- 12. PHP_CodeSniffer & VSCodeの環境を作ってみた
- 13. Laravelで自作Paginatorを作る
- 14. LaravelのミドルウェアでDBにアクセスログを残す
- 15. LaravelでRedisのテストにFaker(Factory)を使う
- 16. Laravelでデータベースを操作する(Eloquent編)
- 17. 【FuelPHP】Html::anchorを使わずにページ遷移させる
- 18. 一歩進んだMVCフレームワークの使い方
- 19. 【Laravel】テンプレートの書き方
- 20. 【Laravel】コントローラの書き方
【デザインパターン】PHPでTemplate Methodパターンの実装をしてみた
## 環境
– PHP 7.2.18## Template Methodパターンとは
Template とと言うのは、よくいろんな人が「テンプレ」などと略すアレです。
メールなどの定型文や、作品のベースとなるひな形などの「決まった様式」のことを指すことが多いですよね。
Template Methodパターンの名前の由来もそこからきていて、決まった処理の流れなどを抽象クラスで「枠」として定めて、具体的な実装の内容は具象クラスで実装するものとなります。## Template Methodパターンは何がいいか
Template Methodパターンを使うことで、似たような処理、繰り返し使われるような処理を共通化することができます。
関数による処
関数の中で関数を出力
#関数の中で関数を出力
今回は勉強を進めているときに、疑問に思った
関数内での関数や変数の記述の仕方について発見があったので
書き留めておきますまずびっくりしたのが関数内で別の関数は出力できる!ということ
“`php
【PHP8】厳密なswitch文ことmatch式が使えるようになる
PHPがよく言われる問題点のひとつとして、[switch](https://www.php.net/manual/ja/control-structures.switch.php)が[曖昧な比較である](https://qiita.com/GHKEN/items/e2c96324a0365a690e86)ということが挙げられます。
“`php
switch($x){
case 1:
‘$xは1だよ’;
break;
case “1”:
‘$xは”1″だよ’;
break;
}
“``case “1”`に到達することは決してありません。
ということで厳密な比較を用いるswitchことmatch構文のRFCが提出されました。
以下は[Match expression v2](https://wiki.php.net/rfc/match_expression_v2)の日本語訳です。# PHP RFC: Match expression v2
## Proposal
このRFCは、switchに似ていますが、より安全なセマンティクスを持つmatch構文
【Laravel】Carbon Data Missingエラーの対処
### 問題
日付を登録・更新する際に日付フォームのパラメータで、Carbon Data Missingエラーが発生した。
(datepickerを使用していて、渡ってくる値はY-m-d H:i)このエラーは秒(second)が入っていないなどパラメータが不足することが原因で発生するため、パラメータに秒が含まれてないときの対処法を以下で説明する
### 概要
日付カラムを追加するため、モデルで$datesを設定している“`php:Model
protected $dates = [
‘public_start_at’,
‘public_end_at’,
];
“`$datesに設定しているとデフォルトでY-m-d H:i:sとなり、渡される値に過不足があると今回のようにCarbon Data Missingが起こってしまう
下記のようにdateFormatを設定することもできるが日付フィールド全体が’Y-m-d H:i’の形式になってしまうため、扱いづらい。
“`php:Model
protected $dateFormat = ‘Y-m-d H
[PHP]公式のDockerコンテナにphp-redisをインストールする
# はじめに
php公式のDockerコンテナにphp-redisを入れようと思ったのですが、`apt-get install`でもダメ、`docker-php-ext-install`でもダメで、しばらくハマったのでやり方を書き残しておきます。
## 結論
先に結論です。※バージョン指定は各自で変えてください。
“`dockerfile
RUN pecl install redis-5.1.1 \
&& docker-php-ext-enable redis
“`## php公式コンテナについて
https://hub.docker.com/_/php
いくつか種類がありますが、大きく分けて2つに分けられます。
– php-cli→cliのみ使用可能。サーバーで動かすことを目的とする場合はこれじゃないです。
– php-fpm→サーバー上で動かす事が多いので基本はこっちを選ぶことになります。nginxのようなサーバーで動かせるようにCGIが含まれています。## 拡張モジュールのインストール
### PHP拡張モジュール
PHPで作られている拡張モ
PHPStormなら、「あ〜これ別のメソッドに切り出したいな〜」ってときに一瞬でした
![Jun-22-2020 17-48-06.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268801/60688d66-f9b9-2bc7-91b2-05919f7c8fe6.gif)
# 例
以下のようなコード、
パンケーキを3つ焼くメソッドがありますが、ループの中でパンケーキを焼く処理を細かく記述されています。
もちろんこれでもそれほど悪いコードではないと思いますが、
パンケーキを焼くための詳細なロジックを他のメソッドに切り出せたら、メソッド全体の見通しが少しスッキリしそうです。“`php
class Test
{
public function makeThreePancake(): void
{
$kitchen = new Kitchen();
$kitchen->initialize();foreach (range(0, 3) as $i) {
// 見通しが悪い処理
Laravel 現在のマイグレーションを管理しているテーブルを確認する
# 目的
– マイグレーションを管理しているテーブルの確認方法を説明する。
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaae
Laravelでの画像アップロード
皆さん、こんにちは!今回は私が、Laravelを勉強していて盛大にハマった箇所があるので今後のためにも、この記事を書くことにしました。そのハマった箇所というのが、画像をアップロードする方法です:joy:
あまり良い記事が無かったのでかなり時間を使ってしまいました。では早速いきましょう:v:#開発環境
・Mac
・php 7.4.6
・Laravel 7.15.0
・MySQL
#Laravel画像アップロード
今回は、Laravelの基礎知識があることを前提に話を進めて行きます。
今回私が作成したのは以下のようなものです。
![スクリーンショット 2020-06-22 13.01.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645930/3114f0d3-3b3a-fe84-a7bb-9d6cc5aca4b7.png)
このようなフォームを送信すると、
![スクリーンショット 2020-06-22 13.03.16.png](https://qiita-image-store.s3.ap-n
PHPでDBから配列を取り出し、jsに渡して、chart.jsでグラフ作成
caledar_tableにあるTUTORというカラムの数をカウントし、グラフにする。
“`PHP
$sql = “SELECT TUTOR,COUNT(TUTOR) AS COUNT FROM CALENDAR_TABLE GROUP BY TUTOR ORDER BY COUNT DESC”;
$stmt = $pdo->prepare($sql);
$status = $stmt->execute();$res = $pdo->query($sql);
//取得したデータを全てフェッチする
$data = $res->fetchAll();
“`“`javascript
var data_array = ;
name_array = [];
count_array = [];
for(key in data_array){
name_array.push(data_array[key][0]);
count_array.push(data_array[key][1]);
// alert
foreachで配列を更新する場合の注意(unsetを付ける)
foreachで配列を更新する
PHPの配列を更新するのに躓いたので、学習記録の意味でここにメモします。
初歩の初歩のお話。
forで配列を更新し代入し直す方法
まず、forを使って配列に代入し直す方法。
例)$array = [1, 2, 3];の数字の配列の各数字に+1して代入し直す。
“`
$array = [1, 2, 3];
for($i = 0; $i < count($array); $i++){ $array[$i] = $array[$i] + 1; } var_dump($array); /*実行結果 array(3) { [0]=>
int(2)
[1]=>
int(3)
[2]=>
int(4)
}
*/“`
これはかんたん。
他にもっと良い方法がある気もする。foreachで配列を更新し代入し直す方法
上記をforeachでする方法。
参照代入を使う。
“`
$array = [1, 2, 3];foreach($array as &$arr
Laravel 7.16.1 での409エラー
Laravel 7.16.1 を触っている最中にフォームから送信ボタンを押すと409エラーが発生したので、その解決策をここに備忘録も踏まえて記載しておきます。
“`php
“`
csrf_fieldを入れておくと、その部分がcsrf認証のトークンを生成するタグに変換されてエラーがでなくなります。
PHP_CodeSniffer & VSCodeの環境を作ってみた
何かしらのコーディング規約を導入したいPHPのプロジェクトがあったので、PHP_CodeSnifferを導入してみました。その手順をまとめています。
# PHP_CodeSnifferとは?
PHP_CodeSnifferとは、特定のコーディング規約に違反していないかどうかをチェック、修正する開発ツールです。
PHP、JavaScript、CSSファイルのコーディングに関して、規約違反がないかを判定、修正することができます。# 導入手順
### PHP_CodeSnifferの導入
Composerを使って、プロジェクトのローカルにPHP_CodeSnifferをインストール“`
composer require –dev “squizlabs/php_codesniffer=3.*”
“`## コーディング規約の設定ファイル作成
規約の設定用ファイル`.phpcs.xml.dist`をプロジェクト内に作成
中身は例です。“`xml
Laravelで自作Paginatorを作る
LaravelでPaginationを実装するときは、Laravelフレームワークで提供されている LengthAwarePaginatorを継承して、独自のPaginatorクラスを実装すると便利です。
ブログの記事を想定してサンプルコードを示します。
“`php:PostPaginator.php
LaravelのミドルウェアでDBにアクセスログを残す
Laravelアプリの検索フォームのリニューアル時に、ユーザーへのアンケートではなく、chromeの開発チームのように利用統計から改善したいと思いました。
最も利用される検索フォームは電話番号か氏名のどちらか、と調べられたり、レスポンス改善の優先度を見える化するためにミリ秒単位でロード時間を測るまでをゴールとします。
ミドルウェアを使って、簡単に実装できました。ファイルもartisanコマンドで作成できます。
“`
$ php artisan make:model HttpRequest –migration
Model created successfully.
Created Migration: 2020_06_20_010616_create_http_requests_table$ php artisan make:middleware CollectHttpRequestStat
Middleware created successfully.
“`作成された3ファイルに[https://github.com/umihico/laravel-demo/c
LaravelでRedisのテストにFaker(Factory)を使う
先生はfですか?zですか?
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪ ---- ------------------- ↓ 余談はここから ↓------------------- Laravelを使っていて、 CSVファイルをデータベースに登録する際、 一時的に利用するデータをテーブル創って入れていたのだが、 **Redisでよくね?** と思い立ってしまった。 で、データベースのテストにはFactoryやSeedを使ってるわけだけど、 Redisでも使えるようにならんかなぁ :thinking: となったのでちょっとやってみた。 また、訳わからんこと。。。 :upside_down: とりあえず動くレベルで、 形にはなったのでここに残しておこう。 Laravelのバージョンはこちら ```bash $ php artisan --version Laravel Framework 5.7.28 ``` テーブル構造はこんな感じ | item_name | item_num | item_price | |:----------------:|:-----
Laravelでデータベースを操作する(Eloquent編)
# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています[Laravelで入力値エラーチェック(validate)を実装する](https://qiita.com/toontoon/items/abf5c52eb0c3fe11003c)
[Laravelでフラッシュデータ(直後のHTTPリクエストの間だけセッションに保存されるデータ)を使う](https://qiita.com/toontoon/items/eb9de17f65c198112f24)
本記事は上記の内容を理解している前提で書かれています[LaravelでDIを使う](https://qiita.com/toontoon/items/ebf53e4053be6f663730)
本記事は上記で作成し
【FuelPHP】Html::anchorを使わずにページ遷移させる
#問題点 : Html::anchorを使った時
“`
//返り値 Example
echo Html::anchor(‘example’, ‘Example’);//返り値 Example
echo Html::anchor(‘http://www.otherdomain.com/example’, ‘Example’);
“`公式のドキュメントには上記のように書いていますが、
次のようにaタグの中にspanタグなどを入れたい場合の書き方が解説されていませんでした。“`
Qiita
“`#解決策 : Uri::base()を使う
半日頭を悩ませて、Uri::base()を使う結論に至りました。
## まえ書き
私は現役バリバリでコードを書いてるエンジニアではないので、モダンな内容の記事は書けません。エンジニア1, 2年生がなんとなく理解しているけど、はっきりとは理解できていない、そんなことが、よりはっきりとした理解に変わる。そんな記事が書けたらなと思っています。## MVCパターンの限界
前回の投稿からだいぶ時間がたってしまっていますが、[前回投稿](https://qiita.com/takutokondo/items/955a4967dfac64cdc4a2)した記事では、MVCパターンにおいて、ビジネスロジックとはどういうことなのか、それはどこに実装するのが望ましいのかについて書かせて頂きました。しかしながら、ビジネス要件が目まぐるしく変わる今となっては、これに対応できず限界に達しています。**MVCパターンが限界になるまでの変遷**
MVCパターン(≒MVCフレームワーク)の登場
↓
ビジネスロジックをControllerに書くため、Controllerが肥大化
※ そもそも間違ってる、でも当時の参考書がみんなそうなっていた
↓
Skinny Controll
【Laravel】テンプレートの書き方
# 概要
LaravelのMVCのうちのビュー周辺について説明するよ
つまり、テンプレートの書き方だね
初心者向け程度の内容だよ
[【Laravel】コントローラの書き方](https://qiita.com/KagYeah/items/08c8159a5439f522018c)と一緒に読むといいよ# ビューの呼び出し
コントローラ側でview()が呼ばれると、引数に与えられたテンプレートがレンダリングされてブラウザに表示されるよ
例えば、view(‘welcome’)の場合、resourcesフォルダ内のviewフォルダの中にあるwelcome.blade.phpまたはwelcome.phpというファイルが呼び出される
2つともファイルがあると拡張子がblade.phpの方が呼び出されるviewフォルダの中にさらにフォルダを作りその中にテンプレートを作ると、
view(‘フォルダ名.テンプレート名’)
のように呼び出せばいい# テンプレートの例
– htmlファイルと同じように書く“`php:resources/view/hello.blade.php
【Laravel】コントローラの書き方
# 概要
Laravelのコントローラ周辺について説明するよ
初心者向けの内容だよ
[【Laravel】ルーティングの書き方](https://qiita.com/KagYeah/items/552a36596e0d8b4b9b92)と一緒に読むといいよ# コントローラ
コントローラとは、アプリケーションの処理を実装する部分だよ
クライアントからアクセスがあると、ルーティングによって、「○○というアドレスがきたら××という処理を行う」ということを決めるんだけど、この「××という処理」を書いているものがコントローラだよ
コントローラはクラスで表されていて、アクションというメソッドで書かれたものの中に具体的な処理を書いていく## 基本
コントローラを作成するにはartisanコマンドを使う“`zsh:
% php artisan make:controller コントローラ名
“`コントローラ名は大文字で始まって、○○Controllerという名前にするのが一般的だね
“`zsh:
% php artisan make:controller HelloControl