- 1. ポケモンのクラスを作ってPHPオブジェクト指向の3大要素を理解する
- 2. AWS: 簡単なLAMPサーバーでWordPressを動かすまで(Intel Mac) 〜PHPをインストール〜
- 3. Docker環境でPHPでGDライブラリを有効にする方法
- 4. ubuntuにcomposerをインストール
- 5. はじめてORM(Eloquent, Doctrine)を使うことになったPHPerのための手引き
- 6. LaravelでHttpRequestを扱う際の個人的ベストプラクティス
- 7. PHP MAMPで環境構築
- 8. 最小限のSSR付きSPAフレームワークを作ってみた
- 9. テンプレート(smarty, mustache)をPHPファイルに適用する
- 10. Bit演算子について
- 11. laravel テストアサーション 論理削除されているか確認する(要点のみ)
- 12. laravel ルートnameを使ってパスを取得する方法
- 13. 【BladeOne】インストールと基本的な使い方
- 14. WordPress投稿ページの検討
- 15. 【PHP学習メモ】HTTPリクエストメソッド
- 16. laravel/jetstream[v2.10.0, …, v2.10.1] require illuminate/support ^9.0 と返ってくるエラーの解消方法
- 17. 【PHP】static・const・defineの挙動の違いと、呼び出し方$this・self::の意味
- 18. レンタルサーバーを借りてオンラインゲームのWikiサイトを作ってみる #1
- 19. レンタルサーバーを借りてオンラインゲームのWikiサイトを作ってみる #0
- 20. 【Laravel】データベーステストで本番用データベースを汚さない方法。
ポケモンのクラスを作ってPHPオブジェクト指向の3大要素を理解する
## はじめに
こんにちは。masakichiです。PHPのオブジェクト指向には3大要素というものがあります。
「カプセル化」「継承」「ポリモーフィズム」の3つだそうです。知らない人からすると、なんのこっちゃだと思います。
これらを理解するには、PHPのクラスから学んでいくといいと考えています。ということで、まずはPHPのクラスについて理解するために、ポケモンを通して実装例を書いていこうと思います。
ポケモンには様々な種類がいます。
一番最初は151匹だったのに、いまでは900種類以上いるそうです。とても覚えられたものじゃありません。
さて、いきなりですが、ここであなたはポケモンの開発者になったとします。
900種類以上のポケモンを表現するために、プログラミングコードを記述しなくてはいけません。
そんな時、1匹ずつ別々のプログラミングコードを記述することで実現は可能かもしれません。しかし、そのやり方だと、もしまた新しいポケモンが発売された時、同じように新種のポケモンの数だけコードを書き足さなくてはいけなくなります。
そんな時に役立つのがクラスという考え方です
AWS: 簡単なLAMPサーバーでWordPressを動かすまで(Intel Mac) 〜PHPをインストール〜
# はじめに
AWSハンズオンの学習記録です。
2022年8月の情報をもとに投稿します。ゴールは、EC2を使って簡易的な仮想サーバーを作り、ブログソフトであるWordPressをインストールします。
また、WordPressを外部公開できることを想定しています。**今回はプログラミング言語である「PHP」のインストール方法を投稿します。**
尚、ハンズオンがメインのため、各サービスの概要や用語の解説は極力省かせていただきます。
### ゴール
仮想サーバーでWordPressを使える状態にします### ゴールまでの流れ
[1.VPCとサブネットを作成](https://qiita.com/holySh10/items/749b98e320fc71e6739e)
[2.EC2を作成/セキュリティグループの設定](https://qiita.com/holySh10/items/90a3501d819f1ae2c7cd)
[3.EC2へSSH接続](https://qiita.com/holySh10/items/689f4c83cd18db128983)
[4.Webサー
Docker環境でPHPでGDライブラリを有効にする方法
# ハマったこと
php:8.0-apache-bullseye環境で開発中、GDに依存しているライブラリをcomposer requireした際、Dockerの立ち上げ時に以下のエラーが出るようになった
“`
#0 0.140 + composer update
#0 0.216 Loading composer repositories with package information
#0 1.609 Info from https://repo.packagist.org: #StandWithUkraine
#0 6.428 Updating dependencies
#0 7.318 Your requirements could not be resolved to an installable set of packages.
#0 7.318
#0 7.318 Problem 1
#0 7.318 – maatwebsite/excel[3.1.28, …, 3.1.30] require phpoffice/phpspreadsheet 1.
ubuntuにcomposerをインストール
参考
https://mebee.info/2020/06/02/post-10844/“`
sudo apt install -y php libapache2-mod-php php-gd php-xml php-cli php-mbstring php-soap php-xmlrpc php-zip
“`“`
curl -sS https://getcomposer.org/installer | php
“`“`
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
source ~/.bashrc
“`
確認
“`
composer -v
“`
はじめてORM(Eloquent, Doctrine)を使うことになったPHPerのための手引き
## はじめに
この記事ではORM(=Object Relational Mapper)を使うメリットやORMとはみたいな小難しい話はしません。フラットなPHPを書いていたPHPerがORMを使う世界に初めて来た場合、そもそもORMの1レコード=1オブジェクトという世界観に対してなかなかイメージがつかめないことがあるのを観測したので、そこのイメージギャップを埋められればと思って書いてみました。
そもそもクラス?オブジェクト?インスタンス?プロパティ?メソッド?みたいな用語面で躓いている場合は https://www.php.net/manual/ja/language.oop5.php 辺りを別タブで開いて行ったり来たりしながら読んでもらうと良いかもしれません。
## データの読み取り
### 従来の考え方
![データベース](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23963/bccd50a9-8992-3d9f-baee-98c7af738ca0.png)
上の図のようなデータベースの表
LaravelでHttpRequestを扱う際の個人的ベストプラクティス
[最終的な成果物](#最終成果物)
# 基本的な考え方と、問題点
LarvelにてRequestを扱う際、少しググった場合も、書籍等の場合も大体FormRequestを継承すると便利だよー。
といった旨の解説とともに、Sampleでコードを載せてくれています。
そのSampleはとてもSimpleで確かにこれは簡単だ!と思わせてくれる内容であるので大抵はそのSampleに習い実装をしていくことかと思います。しかし、時と場合によっては複雑なHttpRequestを扱わなければいけなかったり、とても大量のパラメータを扱わなければいけなかったりします。
そのような状態に陥ったときに、FormRequestを継承して使う。
だけでは少々苦しい場面に遭遇することがあります。
苦しいとはいっても– RequestクラスがFatになる
– バリデーションの記述が少し難解になるくらいではあるのですが。
また、これはそもそもですがLaravelのFormRequestは– どのようなパラメータを受け付けるかについての見通しがよくない
とも思ってます。
そのうえ
PHP MAMPで環境構築
PHPの環境構築をMAMPで行います。
環境{
Mac
MAMP
VScode
}備忘録
## MAMPとは
Webアプリの開発に必要な環境をまとめたソフトウェア。
MAMPをインストールするだけでPHPの実行環境が整う。従来、Mac向けに開発されたソフトウェアであり、Macユーザー向け。
(現在はWindows版も提供あり)Macintosh(マッキントッシュ):従来、Mac向けに開発されたため
Apache(アパッチ):Webサーバー
MySQL(マイエスキューエル):データベース
PHP:PHPで書かれたプログラムを実行するソフトウェア## インストール
まず、公式からインストールします。
[MAMP公式](https://www.mamp.info/en/mac/)“`terminal
1,Free Download をクリック2、intel か M1(2) のいずれかを選択しダウンロードを開始
3、ダウンロード終了したら、インストーラーを実行し、ホップアップで「続ける」を選択
4、更に警告ホップアップ。移動したり名前を変更したりするな。とのこと
最小限のSSR付きSPAフレームワークを作ってみた
# 概要
PHPのテンプレートライブラリでいろいろ考えていた時にふとこうすればSSRっぽいことができるんじゃないかと思ったので試しに作ってみた記録。
どうせ需要なんてないのはわかりきってるので適当。https://github.com/uniras/microssr
# PHPコードとテンプレートの両立
別記事で書きましたが、意外と簡単に1ファイルでPHPコードとテンプレートの両立が出来たので、これもっとPHP側でごにょごにょすればSSRっぽくなるんじゃね?って気づきました。
# Mustacheの採用
テンプレートエンジンはMustacheを採用した、なぜかというと探した限り公式でPHPにもJavaScriptにも対応したテンプレートエンジンはこれくらいだった。
また、PHPも(composerとかで)インストールしなくてもファイルをフォルダごとアップロードするだけで使えるようになるのも決め手になった。# サーバーサイド部分
こんな感じのコンテンツファイルを作る。
“`php
テンプレート(smarty, mustache)をPHPファイルに適用する
# 概要
PHPファイル自身をsmartyやmustache等のテンプレートエンジンのテンプレートとして適用できるのかという思考実験をしてみたら簡単にできたので公開してみる。
# 何がうれしいの?
テンプレートエンジンを実行してテンプレートを展開するコードをテンプレートに埋め込めれば、
PHPファイル1つ(テンプレートエンジン本体のソースコードを除く)でテンプレートの実行結果が確認できてテンプレートの製作がはかどりそうと思った。# やり方
PHPファイル本体は`file_get_contents(__FILE__)`で取得できるので、PHP部分` ~ ?>`を正規表現で取り除いてからテンプレートエンジンに渡すだけ。
# なぜsmartyとmustache?
どちらも最悪ZIP解凍したファイル群をフォルダごとアップロードするだけでテンプレートエンジンの実行ができるから。
だいたいのテンプレートエンジンはそうなのかもしれないけど。要はたまたま目についただけ。
一応mustacheは他の言語というかJavaScriptにも公式対応しているので夢が広がりそうと思った部分もあ
Bit演算子について
うす、豚野郎です。
最近、このQiitaの存在を会社の人にバラしたら
「おっす!豚野郎です!」といじられました。さて、今回はBit演算子について書いていこうと思います。
プログラムでも2進数が使えることを初めて知りました。公式ドキュメントに沿って書いていこうと思います。
https://www.php.net/manual/ja/language.operators.bitwise.php・バージョン:PHP 7.4.29
順番的に以下の順番で書いていきます。
1.ビット積
2.ビット和
3.排他的論理和
4.否定
5.左シフト
6.右シフト## 1. ビット積
> $a および $b の両方にセットされているビットがセットされますここでは3と5を例に書いていきます。
10は二進数だと1010、15は二進数だと1111です。この場合、ビット積は1010になるので、結果は10になるはずなので検証します。
“`bit.php
“`結果
“`
1
laravel テストアサーション 論理削除されているか確認する(要点のみ)
# 概要
– DB系テストアサーションで論理削除されていることを確認するアサーションとその使い方を要点のみまとめる。
# 方法1 – モデルを使う
– `assertSoftDeleted()`の引数に論理削除されたことを期待するモデルを渡すことでチェック可能である。
“`php
$this->assertSoftDeleted($fooModel);
“`# 方法2 – テーブル名と一意の値を使う
– `assertSoftDeleted()`の引数にテーブル名とレコード絞り込みデータを渡すことでチェック可能である。
“`php
$this->assertSoftDeleted(
table: ‘テーブル名’,
data: [
‘id’ => 1,
],
);
“`# 参考文献
– [https://readouble.com/laravel/9.x/ja/database-testing.html#assert-delete
laravel ルートnameを使ってパスを取得する方法
# 概要
– laravelの`route()`とPHPの`parse_url()`を用いてルートnameからパスを取得する方法をまとめる。
– 自分なりの方法です。もっといい方法あったらコメントいただけますと幸いです。。!# 方法
– 下記のように記載する。
“`php
$path = parse_url(route(‘ルートname’), PHP_URL_PATH);
“`
【BladeOne】インストールと基本的な使い方
# はじめに
BladeOneを使用して実装する機会がありまとめることにしました。
QiitaではBladeOneの記事がほぼないため参考になればと思います。# BladeOneとは
BaldeOneとは、LaravelのBladeを単一のPHPで使用できるようにしたものです。
ただし、LaravelのBladeとBladeOneは違うものなので注意が必要です。
※詳細は「[Differences between Blade and BladeOne](https://github.com/EFTEC/BladeOne/wiki/Differences-between-Blade-and-BladeOne)」を参照して下さい。# ライセンス
ライセンスは「[License](https://github.com/EFTEC/BladeOne#license)」を参照して下さい。# インストール
インストール方法は2パターンです。
– composerを使用してインストール(今回はこちらを使用)
– `composer require eftec/bladeone`
–
WordPress投稿ページの検討
## クライアントのためにシンプルな投稿ページを
クライアントにとって使いやすい投稿ページを作成しようと検討しました。
ブロックエディタでのテンプレート機能やAdvanced Custom Fieldsの機能などを使ってみましたが、
結果としてCPT UI x Smart Custom Fieldsに落ち着きました。ガリガリ言語ページではなく、プラグインをうまく使っていい感じにページを作成したい思いで綴ってます。
手抜きすぎだろ!と突っ込みたい気持ちを抑えて読んでいただけるとありがたいです。
クライアントは、wordpress触りたいけど知識は全くないので、
迷わず投稿できるか、、という部分で今回、事例ページとコラムページを作りたいということで
### CPT UIを利用して専用メニューの作成
https://hirashimatakumi.com/blog/5271.html
事例ページとコラムページの構成としては、
見出し
画像
テキストとシンプルなループで処理したい。
というわけで、https://ja.wordpress.org/plugi
【PHP学習メモ】HTTPリクエストメソッド
# HTTPリクエストメソッドの使い方
※本記事はPHP学習の備忘録目的です。筆者は初学者ゆえ、誤りなどございましたらご指摘いただけますと幸いです。**HTTPリクエストメソッドとは**
ブラウザ(クライアント)からWebサーバに対してしてほしいことを依頼するための手段
HTTPメソッドには「GET,POST,PUT,DELETE」などがあるどのHTTPメソッドが使われているかはデベロッパーツールの「Network」パネルから確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/f761729c-f0b0-43b5-e68a-45535ed5bba7.png)## 各メソッドの使い方
**1.GETメソッド**
データを取得するときに使用されるメソッド
WebブラウザにURLを入力してページを表示するときには常に「GET」メソッドが使用される。
条件を指定して検索する場合にはURLパラメータとして条件を指定する
https://example.co
laravel/jetstream[v2.10.0, …, v2.10.1] require illuminate/support ^9.0 と返ってくるエラーの解消方法
## はじめに
Laravel(v9.2.1)で開発を進めていったところ、Viteの影響に対応できず
バージョンを落とし(v8.7.5)、Jetstreamをインストールしようとコマンドを
実行したところで、タイトルのエラーが発生。## 起きた事象の詳細
Jetstreamをインスールするためのコマンドを実行。
“`
composer require laravel/jetstream
“`
すると、以下のエラーが返ってくる。
![20220806-231443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/aa3b21e6-5266-71bc-ea1d-9bc8b2844d17.png)
出力されているエラーによると、現在リリースされているJetstreamの
バージョン(2.1.0)はLaravelのバージョン9.0以上でサポートされているようです。## 解決方法
Jetstreamのバージョン2.1以下に指定し、コマンドを実行する事で解決。
“`
composer r
【PHP】static・const・defineの挙動の違いと、呼び出し方$this・self::の意味
変数や定数を定義するときに使うstatic、const、defineについて、挙動を試してみたのでメモ。
またstatic、const、defineそれぞれの特徴と、$this、self::の呼び出し方の意味についてまとめる。
## それぞれの特徴
### staicとは> クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。
>[PHP: static キーワード – Manual](https://www.php.net/manual/ja/language.oop5.static.php)
staticが付いていない通常のメンバ変数は、生成したインスタンス毎に管理される。
一方staticが付いていると、インスタンスに関係なくメンバ変数の実体は1つのみとなる。
### constとは
> 値が変更できない [定数](https://www.php.net/manual/ja/language.constants.php)をクラス内に定義することができます。 クラス定数のデフォ
レンタルサーバーを借りてオンラインゲームのWikiサイトを作ってみる #1
前の記事
https://qiita.com/Unirenkon/items/7ed5bcc724205906083c# 今回の作業
* レンタルサーバーを借りる
* 独自ドメインを取得する
* Pukiwikiをサーバーにインストール今回は本記事(シリーズ)を書こうと思った前日にやった作業なので、SSなどを用意できなかった部分があります。
## レンタルサーバーを借りる
自前でサーバーを借りてWikiを作る場合、**Xserver**というサーバーを利用すると、**Pukiwiki**というOSSが簡単にインストールできることがわかったので、まずはXserverと契約しました。キャンペーンをやっていて、ちょうど10日間無料をやっていたのもやるか〜と思ったきっかけです。
今のキャンペーンは2022年8月25日(木)18:00までで、さらに独自ドメイン無料、利用料金キャッシュバックもやっているとのこと※条件あり
(ただキャンペーン自体は形を変え割といつでもやっているものだろうなとも思いますw)10日間無料の体験はクレジットカードを登録しなくてよかったので気楽に試せる
レンタルサーバーを借りてオンラインゲームのWikiサイトを作ってみる #0
# 経緯
海外でリリースされる予定のオンラインゲームの日本語Wikiがなかったので作ろうかなと思って調べてみたら、@WikiみたいなレンタルWikiを使って作る以外にも自前でサーバーをレンタルして作ることができるそう
昔からプライベートでなんかレンタルサーバー借りて独自ドメインでサイト作ってみたい〜みたいな気持ちがあったけど、ネタもやる気もなかったところでいい機会かなと思ってやってみる# 筆者について
新卒時代に1mmくらいWebエンジニアとしてのキャリアがあるくらいの素人# 記事を残そうと思った理由
昔の記憶を掘り起こしたり色々調べたりして今回やったことを今度なんかの機会にやりたいなと思った時に見返せる自分用メモ
素人なので情報の信用性とか用語の使い方とかの解像度が薄めです
また、個々の技術については基本は他の方の記事やブログから得た情報です# ワークフロー
※6以降は今の時点では願望レベルです1. レンタルサーバーを借りる
1. 独自ドメインを取得する
1. Pukiwikiをサーバーにインストール
1. フロントを簡単にいじれるように環境を整える
1. 記事を書く
【Laravel】データベーステストで本番用データベースを汚さない方法。
データベーステストのやり方がわからなかったので、アウトプット。
1.Mysqlに入りデータベースを作成
2.`phpunit.xml`を開いて、`APP_ENV`の値を`testing`に変更。こうすることで.envファイルに本番用の`mysql`があってもテストではこっちが使用される.
3.テスト作成コマンド
“`
php artisan make:test [テストケースクラス名] –unit
“``RefreshDatabaseトレイト`とは
テストごとにデータベースをリセットしてくれる便利なトレイト。
* マイグレーションを実行しなくても、勝手にテスト実行の際実行してくれる。
* テスト終了したら削除してくれる(カラムだけ削除される。テーブルは削除されない)
* `use RefreshDatabase;`をすることでつかうことができる。↓“`
use Illuminate\Foundation\Testing\RefreshDatabase;
clas