- 1. Chapter3 サービスとビューコンポーザ
- 2. 【PHP基礎⑧】if構文-3
- 3. 【PHP基礎⑦】if構文-2 否定の条件分岐
- 4. LaravelのPHPUnitでS3へのアップロードテスト
- 5. Windowsで開発したPHPをCentOSにデプロイしたときに起きやすいエラー
- 6. CentOS Stream 8にPHP PDOのMySQLドライバをインストールする手順
- 7. 「オブジェクト指向による簡易版ブラックジャックゲームの実装(PHP)」のクラス図修正案
- 8. PHP 列挙型(enum)と値に依存した列挙型(backed enum)
- 9. 3-4 レイアウトの作成
- 10. Docker内のPHP7.4からMS SQLServerに接続する
- 11. [Laravel]認証中にAPP_KEYを変えた場合どうなるか
- 12. 【PHP基礎⑥】if構文-1
- 13. 【Laravel】Excel テンプレートファイルを編集してダウンロードさせる
- 14. ツリー構造の循環参照をチェックするバリデーションを考えてみる
- 15. Laravel 実務で使ってるバージョンはどれ?調査協力お願いします
- 16. LaravelのResource ControllerによるCRUD操作
- 17. PHPのmatch式に絶望したからネタでC++にmatch式を実装する
- 18. 検証環境にcomposerの本体をインストールしようと思ったら、躓いたので備忘録
- 19. PHP 問題集
- 20. Ajax(非同期通信) 使い方基本
Chapter3 サービスとビューコンポーザ
# サービスとビューコンポーザ
## ビューコンポーザーとは
コントローラから呼び出されたビューテンプレートをレンダリングする際に、
自動的に実行される処理を用意するための部品。## サービスとサービスプロバイダ
**サービス**:機能強化のための仕組み。
**サービスコンテナ**:DIと呼ばれる機能を使ったシステムでLarabelの仕組み。**DI(Dependency Injection)**:依存性注入
**サービスプロバイダ**:
サービスを登録するために用意されている部品で、
必要に応じて特定のサービスを組み込んで使えるようにするためのもの。## サービスプロバイダの基本形
サービスプロバイダは`ServiceProvider`というクラスを継承して作成されます。
“`ServiceProvider.php
【PHP基礎⑧】if構文-3
[問題]
整数値を入力させ、値が正であればpositiveと表示するプログラムを作成しなさい。ただし0は正に含まないものとする。# コード
“`php
$a = intval(fgets(STDIN));
if($a > 0){
echo ‘positive’;
}
“`↓ 「2」と入力
# 結果
“`
positive“`
【PHP基礎⑦】if構文-2 否定の条件分岐
[問題]
整数値を入力させ、値が0ならばzero、0でない場合はnot zeroと表示するプログラムを作成しなさい。# コード
“`php
$a = intval(fgets(STDIN));
if($a == 0){
echo ‘zero’;
}else{
echo ‘not zero’;
}
“`↓ 「6」と入力
# 結果
“`
not zero
“`☆否定の条件分岐
if(条件){
条件を満たす場合に行う処理;
}else{
条件を満たさない場合に行う処理;
}
LaravelのPHPUnitでS3へのアップロードテスト
PHPUnitでファイルアップロードのテストを書いたのはいいけども忘れそうなので備忘録として。。
# 前提
filesistems.phpとか
.env.testingファイルなどは作成、設定済みとします。# やりたいこと
APIでs3にファイルをアップロードして該当ファイルがあればOK、なければNGとするMiddlewareを実装したかった# テストコード
“`
/**
* Middleware Check(OK)
* @return void
* @group upload_test
*/
public function middleware_upload_check_ok(): void
{
//実際のs3ではなく仮のストレージを割り当てる
Storage::fake(‘s3’);
//対象ファイルがないことを確認
Storage::disk(‘s3’)->assertMissing(‘/maintenance_test/maintenance.txt’);// ミドルウェアのチェックもしたいのでなんかしらA
Windowsで開発したPHPをCentOSにデプロイしたときに起きやすいエラー
|[../](https://qiita.com/taconana/items/d382d08a83a2a67f3b6a) |
|—|Windowsで開発したPHPをCentOS Stream 8環境にデプロイしたときに、いくつかエラーやワーニングが出ていたのでメモしておく。軽微な内容です。
## DBの接続先を切り替えておくこと
DBの接続情報が異なる場合、例えば、dbname,user,passwordが異なると、以下の感じのエラーになる。
“`
PHP Fatal error: Uncaught TypeError: Return value of common\\integration\\PersistenceBase::pdo()
must be an instance of PDO, null returned in /common/integration/PersistenceBase.php:45
“`
環境を判別して制御を切り替えるように記述しておくこと。
“`php
public static function isWindows() :
CentOS Stream 8にPHP PDOのMySQLドライバをインストールする手順
|[../](https://qiita.com/taconana/items/d382d08a83a2a67f3b6a) |
|—|CentOS Stream 8でMySQLをインストールし、PHPからアクセスを試みるが、PDOの接続で「could not find driver」のエラーが出た。
“`
could not find driver
Uncaught TypeError: Return value of PersistenceBase::pdo() must be an instance of PDO, null returned in …
“`
MySQLコンソールで接続できることは確認し、dsnやuser/passwordを間違えていないことは確認済み。
“`
// dsn = mysql:dbname=test;host=localhost;port=3306;charset=utf8
// user = root
// password = xxx# mysql -uroot -p test
enter password: xxx
“`
「オブジェクト指向による簡易版ブラックジャックゲームの実装(PHP)」のクラス図修正案
https://qiita.com/daitennn/items/19798b5a0613589ecaa8
上記記事のクラス図の誤記をコメントしようと思ったのですが、以前の指摘でブロックされてしまったようなので、記事にて修正案を書いておきます。
Qiitaのガイドラインにも書いてありますが、間違いなどをみんなで改善していきたいですね。
https://help.qiita.com/ja/articles/qiita-community-guideline
> ☝ 記事の価値はみんなで高めよう
> 読んでみて「この記事が役に立った!」と思ったら、LGTMやコメントなどでぜひその気持を伝えてください。 記事の中に間違いや追記すべき内容などがあれば、非難するのではなくみんなで改善をしていきましょう。Qiitaには編集リクエストなどの、記事をみんなで改善しあえる機能が備わっています。みんなでいまある記事の価値を高めましょう。## クラス図修正案
* クラスの継承は親クラス側に三角形
* Card と BlackJackGame の依存の向きが逆
* 引数で渡すオブジェクトはコンポ
PHP 列挙型(enum)と値に依存した列挙型(backed enum)
# 概要
– PHP8.1から追加された列挙型(enum)について定義方法や使い方をまとめてみた。
# 定義方法(backed enum)
– クラスのように定義する。
– 例えば「aaa」と「bbb」の2つの値をstr1、str2としてそれぞれ列挙したいとき下記のように定義する。
– 列挙型名: StrEnum“`php
enum StrEnum: string
{
case str1 = ‘aaa’;
case str2 = ‘bbb’;
}
“`# 列挙した値を呼び出す(backed enum)
– 下記のように記載することで値を呼び出す事ができる。
“`php
列挙型名::キー名->value
“`– 今回のStrEnumの「aaa」を取得したい場合下記のように記載する。
“`php
enum StrEnum: string
{
case str1 = ‘aaa’;
case str2
3-4 レイアウトの作成
## ベースレイアウトの作成
“`helloapp.php
@yield(‘tit;e’)