PHP関連のことを調べてみた2020年10月13日

PHP関連のことを調べてみた2020年10月13日

オブジェクト指向ベストプラクティス(個人学習用)

#初めに
ズブズブの素人の私ががクラスをを設計できる様に学習を進めていきます。
オブジェクト思考を理解しながら、独立性の高いクラスを構築を目指す。
個人学習目的なのであまり参考にはならない可能性があります。
##目指すクラス設計とは
* 直感的に理解しやすいもの
* メンテナンスが少ない設計また、変更点があっても他のクラスに影響がない設計
* 凝集度は高く
* 結合度は低く

このことから依存関係が少ないクラス設計が望ましいと考えられます。1つのクラスをメンテナンスをすると他のクラスに影響が及ぼしていてはメンテナンスの困ってしまう訳です。
**スパゲッティコードを防げ!!→キーワードは「カプセル化」と「多様性」**
##classの中身を隠蔽化する
例えばお寿司屋さんとお客様がいるとします。
ここではお寿司屋さんの対象がclassとし、お客さんがメインルーティンとします。
お客さんは寿司ネタのオーダーをすると、寿司屋の大将がお寿司を握ってくれる(method)お寿司を提供してくれます。
お客さんはオーダーさえすれば、後は握り終えてお寿司の提供を待つだけです。
この時、お客さんはこの「ネ

元記事を表示

Laravel8 1対1 DBのリレーションを定義しよう

# 目的

– LaravelにおけるDBの1対1のリレーション定義方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| 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.8 | Homebrewを用いてこちらの方法で導入→[Mac HomebrewでPHPをインストールする](https://qiita.com/miriwo/items/cd54077aad7e139cf518) |
| Laravel バージョン |

元記事を表示

Moodle 3.9 マニュアル – コース設定

[原文](https://docs.moodle.org/39/en/Course_settings)

教師またはコース設定の[更新ケイパビリティ](https://docs.moodle.org/39/en/Capabilities/moodle/course:update)を持つ他のユーザーは、[管理]> [コース管理]> [設定の編集]でコース設定を変更できます。

内容
[1 一般](#1一般)
[1.1 コースのフルネーム](#11-コースのフルネーム)
[1.2 略称](#12-略称)
[1.3 コースカテゴリ](#13-コースカテゴリ)
[1.4 コース開始日](#14-コース開始日)
[1.5 コース終了日](#15-コース終了日)
[1.6 セクション数から終了日を計算する](#16-セクション数から終了日を計算する)
[1.7 コースの可視性](#17-コースの可視性)
[1.8 コースID番号](#18-コースID番号)
[2 説明](#2-説明)
[2.1 コースの概要](#21-コースの概要)
[2.2 コース画像](#22-コース画像)
[3 コース形式]

元記事を表示

[Codewars] Find The Parity Outlier

## 概要

Codewarsの問題 `Find The Parity Outlier` の回答の復習とベストプラクティスをまとめる個人メモです。

## 問題

>You are given an array (which will have a length of at least 3, but could be very large) containing integers. The array is either entirely comprised of odd integers or entirely comprised of even integers except for a single integer N. Write a method that takes the array as an argument and returns this “outlier” N.

examples

“`php
[2, 4, 0, 100, 4, 11, 2602, 36]
Should return: 11 (the only odd number)

[160, 3, 1

元記事を表示

LaravelでMVCを利用してとりあえず表示させてみる

【概要】
—————————————-
1.ルーティングの設定

2.コントローラーの設定

3.ビューの設定

4.開発環境

1.ルーティングの設定
—————————————-

“`php:routes/web.php
Route::get(‘hoge’, ‘App\Http\Controllers\HogeController@index’ );
“`
ここで、Route::get(‘hoge’, ‘HogeController@index’ );とすると、
”Target class [HogeController] does not exist”となってしまうので、最初からパスをコーディングしました。

2.コントローラーの設定
—————————————-
“`php:app/Http/Controllers/HogeControllers

元記事を表示

【PHP】strstr() と strtr() の合わせ技で、文字列内の複数文字を置換する

# こんな時に使えます
とあるDBのテーブル内で、複数の要素(例でいうと、職業とステータス)が、
ひとつの文字列に連結されてしまっている場合に、
・分離して
・区切りに使われている記号を取り除いて
・取得

ができる。

# 実例

“`
$sample_text = “勇者[HP300]”
“`
## 分離する

“`PHP

$sample_text_extract = strstr($sample_text, ‘[‘);
// 変数の中身は、[HP300]という文字列

“`

【解説】
strstr()
https://www.php.net/manual/ja/function.strstr.php

第一引数:対象の文字列
第二引数:検索したい文字
返り値: **検索したい文字を含んだ、文末までの文字列**

## 区切りに使われている文字を取り除く

“`PHP
$replace = [
‘[‘ => ”,
‘]’ => ”
];

$sample_text_trimmed = strtr($sample_text_extract,

元記事を表示

【PDO】複文禁止オプションの注意点(ATTR_EMULATE_PREPARES)

# 環境
OS:CentOS 7.3
PHP:7.1.21
mariadb:10.1.22

# 概要
PDOで [PDO::ATTR_EMULATE_PREPARES](https://www.php.net/manual/ja/pdo.constants.php) を `false` にすると、
(機能のひとつとして)セミコロンでつなげたSQL(複文)を禁止できるようですが、
コメント(–) の部分は複文として検知してくれないようです。

※ 以下、[query()](https://www.php.net/manual/ja/pdo.query.php) メソッド使用。

“` php
$sql .= “select * from table1;\n”;
$sql .= “select * from table2;\n”;

//検知してくれる OK
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the rig

元記事を表示

Moodle 3.9 マニュアル – コースカテゴリ

[原文]()

コースカテゴリーは、すべてのMoodleサイト参加者のためのコースを編成します。新しいMoodleサイトのデフォルトのコースカテゴリは「その他」です(これは名前を変更できます)。[コースの作成者](https://docs.moodle.org/39/en/Course_creator)、[管理者](https://docs.moodle.org/39/en/Administrator)、または[マネージャ](https://docs.moodle.org/39/en/Manager)は、すべてのコースをその他のカテゴリに入れることができます。ただし、教師と生徒は、説明的なカテゴリに分類されていると、クラスを見つけやすくなります。

カテゴリ内のコースのリストには、デフォルトで教師と各コースの概要が表示されます。カテゴリ内のコース数が9(10以上)を超える場合、教師と要約のない短いリストが表示されます。

内容

[1 カテゴリの追加](#1-カテゴリの追加)
[2 カテゴリの編集または移動](#2-カテゴリの編集または移動)
[3 サブカテゴリの追加](#3-サブカテ

元記事を表示

【Laravel】いろいろ見たけどリポジトリパターンの実装ができなかった初心者のためにとりあえず実装するまでをシンプルに書く

## 3行で

– UserのModelに紐づいたリポジトリパターンを実装する
– **コントローラではModelにタッチしない**ということを意識する
– 5つのファイルをいじる

## リポジトリファイルを作る

ディレクトリ `/app` の中に `Repositories` というディレクトリを作り、さらにその中に `User` というディレクトリを作り、この中にファイルを2つ作ります(この辺の構成は正直自由ですが)。

– **/app/Repositories/User/UserRepository.php**(実装ファイル)
– **/app/Repositories/User/UserRepositoryInterface.php**(インターフェイス)

この2つのファイルでModelを経由してDBにアクセスして、データを持ってきたりcreateしたりupdateしたりします。
今回はUser Modelに紐づくリポジトリパターンを作ります。つまりこれらを使ってUserのデータを持ってきたり更新したりします。コントローラではなく、これらのファイルで行うことになります。

元記事を表示

クラスの関係をひと目で確認 PhpStormクラス図

![Something went wrong]()
私は仕事でPHP・Laravelを使用していますが、古くからある大規模システムなど、
ベリーファットなコントローラや無数のメソッドがあったり、追うのが大変なことがあります。
そのときにPhpStormの機能、UMLクラス図作成を使用すると便利です。

#どんな図?
継承元のクラスが青い実線で表示され、破線は依存関係(use 宣言)を示しています。
各クラスごとのメソッドをpublic, protectedに分けて表示してくれます。
![Screen Shot 2020-10-02 at 21.11.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429030/4894818c-25c9-6966-ef08-1af3aed99f3a.png)

>2次元の図で表現することは、その情報を記憶しやすくする効果があります。人間の頭はイメージのほうが覚えやすいため、「形」で表現してあると、「2つのクラスの上に描かれていたスーパークラスがあったけど名前は何だっ

元記事を表示

yps並走備忘録 Task4 WordPress環境構築

更新を大分サボってたので大分時間が経ってしまいましたが、Task 4の備忘録を思い出しつつ書いてみます。
ypsはLaravelでの開発がメインですが、今回はちょっと寄り道的なタスクでWordPressの構築を行います。

#事前準備
wgetがインストールされていない場合はインストールしましょう
`sudo yum install wget -y`

#WordPressのセットアップ
※記事執筆時(2020/10/12)の最新版は5.5

**tmpディレクトリに最新版のWPをダウンロードして解凍**
1. `cd /tmp` [^1]
2. `wget https://ja.wordpress.org/latest-ja.zip`
3. `unzip ./latest-ja.zip`

**ディレクトリを移動**
4. `mv wordpress ‘任意のディレクトリ名’` ※任意の名前に変更(なるべく一般的な名前は避ける)
5. `mv ‘任意のディレクトリ名’ /var/www/html/`

**MySQLにWP用のデータベースを作成**
6. `mysql -u roo

元記事を表示

Moodle 3.9 マニュアル – コースをリセットする

[原文](https://docs.moodle.org/39/en/Reset_course)

内容

[1 概要](#1-概要)
[2 リセット方法-ステップバイステップ](#2-リセット方法-ステップバイステップ)
[3 一般的なリセットオプション](#3-一般的なリセットオプション)
[3.1 コース開始日](#31-コース開始日)
[4 ロールリセットオプション](#4-ロールリセットオプション)
[5 成績表リセットオプション](#5-成績表リセットオプション)
[6 グループリセットオプション](#6-グループリセットオプション)
[7 アクティビティリセットオプション](#7-アクティビティリセットオプション)

#1 概要
これにより、アクティビティやその他の設定を保持したまま、一連のユーザーデータを空にすることができます。アイテムを選択するときは、選択したユーザーデータをこのコースから完全に削除することに注意してください。

一般、役割、成績表、グループ、アクティビティデータのカテゴリで、削除するユーザーデータを詳細なレベルで選択できます。

注:コースをリセッ

元記事を表示

CodeIgniter4でTwigを使う(Composer利用)

#CodeIgniter4でもtwigを使いたい
[前の記事](https://qiita.com/kohenji01/items/bcf4832af61e0e0c446f)ではCI4にSmartyを組み込みましたが、近頃はTwigをテンプレートエンジンに採用しているケースも多いのではないでしょうか?
本記事ではCI4にTwigを利用する方法の解説です。

#Twig for CodeIgniter4を導入する
CI4上でTwigを利用するには拙作、[CodeIgniter4 for Twig](https://github.com/kohenji01/CI4Twig)を使うと手っ取り早いです。
CI4との統合は最低限の実装にとどめているので動作は軽いと思います。

例は「[CodeIgniter4をインストール (Composer利用)](https://qiita.com/kohenji01/items/a36dbbbb19bb8808d104)」での導入を終えた流れでインストールをした場合です。

“`bash:composerによるTwig for Cod

元記事を表示

hiddenの使い方

# hiddenの使い方

hiddennは疑似要素として扱うことができる。

“`php:ctpファイル
echo $this->Form->hidden(‘isSelectArea’,[“id” => “isSelectArea”]);
“`

***
jQueryで疑似要素にval()で値を与える。

“`php:js
$(function () {
$(document).on(“change”, “#area”, function () {
$(“#isSelectArea”).val(true); //地域を選択したときにコントローラーで条件分岐をしてaddアクションにリダイレクトさせるためのhidden
$(“#UserConfirmForm”).submit(); //一旦confirmアクションに飛ばす
});
});

“`

***

最後にコントローラで疑似要素を元にif文などで条件分岐できる

“`php:controller
if ($this->request->data[“User”][“isSelectArea”]){
//

元記事を表示

SQLでテーブルにデータ挿入がうまくいかない時

テーブルを作成して、実行すると以下のエラーが発生してしまいました。

エラー内容

>SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column ‘phone_number’
(phone_numbeカラムに入ってる値が指定してる範囲を超えています)

phone_numberのカラムタイプに ”integer” を指定していて、それが原因でした。

$table->integer(‘phone_number’);

”integer(INT)” には、最小値〜最大値まで決められた数値があり、それがこちらです。

![(ENEEU).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674912/a2af288d-21e4-6915-115d-6c4ba01ae822.png)

INTの部分を見てみると、最小値が2〜最大値が8までとなっています。

私は、phone_numbeのカラムに

元記事を表示

mysql プリペアドステートメント

プリペアドステートメントとは??

>sqlのコードをわかりやすくしたテンプレートのようなものです。

書き方
// SQL文の作成
“`$stmt = $mysqli->prepare(“INSERT INTO nekosan (
name, price, better_before, modify_datetime, create_datetime
) VALUES (
?, ?, ?, ?, ?
)”);
“`// パラメータを設定
“`$stmt->bind_param( ‘sisss’, $name, $price, $better_before, $date,
$date);“`
// 実行
“`$res = $stmt->execute();
$stmt->close();
“`

![name, price, better_before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674912/2e40f068-e243-3216-e187-6bc807f587

元記事を表示

【xampp+LibXL】libxlをxamppに導入

自分用のメモとして残します。
LibxlのLinuxへのインストールはそこそこありましたが、
Win環境+xamppへのインストール方法があまりにも少なすぎるため、メモ程度ですが残します。

#■やり方
##1. php_excel.dllインストール
####ダウンロード
下記サイトから対応するPHPのバージョンのビルドをダウンロードする。
https://www.apachelounge.com/viewtopic.php?t=6359
####php_excel.dll設置
解凍して以下のファイルをxamppに設置
`\ext\php_excel.dll`を**\xampp\php\ext直下**に設置。

##2. libxl.dllインストール
####ダウンロード
下記サイトからLibXLをダウンロードする。
https://www.libxl.com/download.html
####libxl.dll設置
解凍して以下のファイルをxamppに設置(2か所)
`\libxl-3.9.2.1\bin\libxl.dll`を**\xampp\apache\bin直下**に設

元記事を表示

[DDD Tips] アプリケーション層とドメイン層の区分けについて

# はじめに
記事を書く時間が取れないため、単発のTipsを書くことにしました。
ドメイン駆動設計の現場で気づいたことや、自分が理解に苦しんだポイントなどを簡易的に取り上げていきたいと思います。

この記事では、ドメイン駆動設計を始めようとしている方を対象に書いています。
「DDDの書籍は沢山読んだ!理解した気がする!」という段階の方に向いていると思います。
概念を理解したつもりでも、いざコードを書こうとすると手が止まってしまう。

今回は、アプリケーション層(ユースケース)とドメイン層の実装で判断に迷いそうな箇所を取り上げていきたいと思います。

※ 当記事はLaravelを例に書いております。

# 例題1
* 記事の投稿機能を持つアプリケーション
* 投稿された記事をユーザーに対して表示するユースケース

## BAD Practice

“`ShowPostUseCase.php

元記事を表示

Moodle 3.9 マニュアル – コースをアップロードする

[原文](https://docs.moodle.org/39/en/Upload_courses)

注:このページは、テキスト(.csv)ファイルを使用したコースの作成に関するものです。コースのバックアップを.mbzまたは.tgz形式でアップロードする場合は、コースの復元を参照してください。

内容

[1 コースをアップロードする](#1-コースをアップロードする)
[1.1 短いファイルの例](#11-短いファイルの例)
[2 テキストファイルの作成](#2-テキストファイルの作成)
[2.1 コース情報フィールド](#21-コース情報フィールド)
[2.1.1 登録フィールド](#211-登録フィールド)
[2.1.2 役割の名前変更](#212-役割の名前変更)
[2.2 コースアクションフィールド](#22-コースアクションフィールド)
[2.3 必須フィールド](#23-必須フィールド)
[2.4 インポートオプション](#24-インポートオプション)
[2.5 コースプロセス](#25-コースプロセス)
[2.6 デフォルトのコース値](#26-デフォルトのコース値

元記事を表示

curl で unable to load client key: -8178 エラーが出た

## 要件
ルート証明書を使用して、とあるホストにアクセスする用事があった。
ゴールは、PHP の cURL 関数でアクセスできること。

### 環境
+ CentOS 7
+ php7.3
– cURL 関数を使用

## 事象
### php の cURL 関数でエラーが発生
証明書のパスを指定して cURL 関数を実行してみたところ、
以下のようなエラーが出てしまった。

“`
# オプション定義(抜粋)
$ch = curl_init( “https://xxxx” );
curl_setopt( $ch, CURLOPT_SSLCERT, “./aaa.pem” );
curl_exec( $ch );

# 実行結果
cURL の戻り値:58
curl_error のメッセージ:
unable to load client key: -8178 (SEC_ERROR_BAD_KEY)
“`

## 調査
### CUI の curl でアクセスしてみる
では、同じ URL に対して CUI の curl で試したらどうなるか確認。

“`
# コマンド
c

元記事を表示

OTHERカテゴリの最新記事