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

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

PHPでポートフォリオ作成:カレンダー

# 記事の概要
作った背景、工夫したところ、機能をまとめました。

下にコードを記載しました。

# 背景

一般的なカレンダー(家の壁にかかっているものを想像してほしいです)を作成したときに、自分のスケジュールを書き込めると、カレンダーとしての価値がアップするのでないかなと思い作成にいたりました。

エクセルのようなレイアウトで日付とスケジュールを同時に表示するようなカレンダーを作成します。

工夫としては、当たり前ですが見た目を分かりやすく、使用者が使いやすいようにシンプルにしました。

# 目的
・PHPを用いて簡単なアプリケーションを作る
・見やすくて使いやすいアプリを作る
・カレンダー機能+スケジュール機能で単純なカレンダーに価値をつける

# スペック
言語
PHP 7.4.2
データーベース
MariaDB 10.4.11
開発環境
Apache 2.4.41

ビジュアルスタジオコード使用

# 主な機能

・今月の日付の表示機能
・来月、前月のカレンダーへのリンク
リンクをクリックすると、来月もしくわ前月のカレンダーに飛びます

・スケジュールの表示機能
カレンダー

元記事を表示

Google reCAPTCHAを設置する

個人的な備忘録として

#APIの取得

ここからいろいろ設定
[Google reCAPTCHA](https://www.google.com/recaptcha/admin/create)

#フロントサイド

“`recaptcha.html





“`

#サーバサイド
“`Ninshou.php
public function login() {
if ($this->request->is(‘post’)) {
//RECAPTCHAからのResponseデータを受ける
$recaptcha

元記事を表示

サービスコンテナをつついて標準Facadeを差し替えたら思わぬところでドハマリした話

# TL;DR

– サービスコンテナをつついて、標準 Facade の機能を変更する実例です。
– Facadeはサービスコンテナにアクセスするのでサービスコンテナのオブジェクトを差し替えればファサードも差し替わる。
– ただしFacade は独自にキャッシュするのでタイミングによってはそれをクリアする必要がある。

# なにがしたい?

[サービスコンテナの解説記事](https://qiita.com/kd9951/items/f2157607d2f6a9534449#%E6%A9%9F%E8%83%BD%E3%82%92%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B)で「標準機能をそっくり置き換えできる」と書いたことがあって、「[ヘルパ関数の置き換え](https://qiita.com/kd9951/items/46ef3559009ee575ea7d)」は記事にしていましたが、今回はその Facade 編です。

テーマは **「テストのときだけトランザクションを実行しないDBファサード」**。

ことの発端は、テストで使っている

元記事を表示

GoogleスプレットシートのデータをWordPressのMySQLにコピーする方法【PHPでまるっと処理】

Googleスプレットシートのデータを、WordPressのMySQLにコピーする方法を説明します。

#スプレットシートのデータをWordPressのMySQLにコピーする方法
PHPファイルでまるっと処理しますが、スプレットシートを公開してJSONファイルでデータを取得可能にした上で、WordPressのサーバからJSONを取得しにいって、MySQLにデータを流し込んでいくというのが大まかな流れです。

#前提(データセットとスプレットシートの下処理)
**【例として扱うデータセット】**
過去記事でも扱っているGoogleフォームで募った会議参加者の情報を管理することを例にあげます。

>(過去記事)
[Googleフォームで取得した画像をスプレットシートで表示する方法【セル内に画像で表示】](https://qiita.com/fuku_up/items/c99a6f711c5caa74961b)

>(参考)
今回扱うデータは[こちら](https://docs.google.com/spreadsheets/d/1SZCuyk2H7FBOxoeLp93imOlUxjBu2g

元記事を表示

PHPの文と式

このスライドは突発で開催された**PHPerKaigi Online(仮)**でしゃべるために用意されたものです。

——

## 前回のあらすじ

——

![PHPカンファレンス関西2020 【公募セッション募集について】 今年も例年どおりPHPカンファレンス関西では公募セッション枠として、有志PHPerの皆様からセッションのスピーカーを募集します。 ※LTのスピーカー募集については後日発表予定です。](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4121/ea7677da-7699-49db-746c-98fa1c60d0e5.png)

——

## コードを自在に操るためのPHP文法入門

> PHPのソースコードを正確に検査したり、ソースコードの一部を書き換えたいと思ったことはありませんか? PHPにはPHP-Parserという構文解析ライブラリがあり、静的解析ツールのPHPStanやリファクタリングツールのRectorはPHP-Parserをベースにしたプラグインでソースコ

元記事を表示

受託Webサイト制作の時の開発環境

今回の開発環境の備忘録と次点として生かそうと思い投稿しておきます。

# 前提
### 案件
ボリューム:20ページくらい
納期:2週間くらい
備考:レスポンシブ(SP版のデザインはなく良い感じに)

### 業務フロー
コーディング→ローカル確認→テスト環境アップ(WebサーバにFTPソフトで)

### 開発環境(マシン、サーバ)
MacOS
MAMP

### 開発リソース
php
css
js
assets(image, font, etc)

### コンパイル
Macのシェルスクリプトでコピーやsassを走らせて成果物を作る。
具体的には、CPコマンドやインストールしたsassコマンドでsrcディレクトリからdistディレクトリに吐き出していく。watch機能もつけた。

### ディレクトリ構成

“`
site/
– dist/
– index.php(home)
– _section.php(home)
– detail/(page)…etc
– css
– home.css…etc
– js
– home.js…et

元記事を表示

?【PHP】Kubernetesの略称に慣れるためにk8sライク略称を作る関数

## この記事は?

ただのネタ記事です
Kubernetesの略称の一つである「K8s」ってのは
Kとsの間が8文字なのでk8sらしいのですがなじみがなかったので関数化しました

## 環境
PHP 7.2.21

## やったこと

“`k8s.php
/**
* K8sライクな略称を作成
*
* @param string $name 略する名前
* @return string 略称/$nameが2文字以下の場合は$nameを返す
*/
public function makeKubernetesLikeAbbreviation(string $name = ”): string
{
$prior = substr($name, 0, 1);
$posterior = substr($name, -1);

$len = strlen($name) -2;

if ($len <= 0) { return

元記事を表示

phpでファーストクラスコレクション

# phpでファーストクラスコレクションを使ってみる

## ファーストクラスコレクション is 何

クラスオブジェクトを独自クラスでコレクション化したもの

## メリット

* オブジェクトの配列を扱うコードが簡単に書けるようになる
* 配列の子要素をオブジェクトで簡単に書ける
* オブジェクト配列に対する処理(件数やフィルター)をコレクション側に定義できる
* 例えば「配列を渡して件数カウントする処理」や「特定の条件に一致するものだけ取得する」ような処理を利用者側が作らなくてよくなる

## よくある配列だらけのソース

“`php

//DBからなにがしかの一覧を取得
$saleList = Db::getSaleList();

$dataCnt = 0;
$over100List = [];
foreach ( $saleList as $saleData) {
$dataCnt++;
if ( $saleData[‘amount’] >= 100 ) {
$over100List[] = $saleData;
}
}

var_

元記事を表示

Laravel + PHPUnitでパスセグメント(パスパラメーター)を再現する

> ここのコードは実際には動作しないと思われます。
> 俺たちは雰囲気でコードを書いている。

例えば以下のようにURLを設定します。

“` php:routes.php
Route::get(‘/{user_id}’, ‘UserController@show’);
Route::get(‘/{user_id}/edit’, ‘UserController@edit’);
Route::get(‘/{user_id}/hoge’, ‘UserController@hoge’);
Route::get(‘/{user_id}/fuga’, ‘UserController@fuga’);
“`

ユーザーが存在しなければ例外とします。
必然的にUserクラスは1つしか存在してはいけないので、ServiceProviderでsingletonにします。

“` php:AppServiceProvider.php
public function boot() {
$this->app->singleton(User::class, function() {

元記事を表示

単体テストを記述できる条件(PHP)

# はじめに

PHPで書いたプログラムの単体テスト(自動テスト)は通常PHPUnitで実装することになります。

その際にテスト対象となるPHPのクラスはどのように書いてもテストできるわけではなく、一定の条件を満たす必要があります。

主に注意すべきは3点です。

– コンストラクタ
– ローカル変数の扱い
– 静的関数、プロパティの扱い

基本的にはPHPUnitが提供しているMockに置き換えられるかどうかというところが焦点となります。

## コンストラクタで複雑な処理を行わない

PHPに限らず大抵のオブジェクト指向のプログラミング言語でもそうなのですが、コンストラクタは他のメソッドよりも制御が難しく、自動テストを記述するのも難しいです。

コンストラクタ内で複雑な処理を実装してしまうと、引数に与えるオブジェクトを除いてMock化することもできないため、テストが記述不能になる可能性が高くなります。

コンストラクタの単体テストが記述できないようなclassの場合、ReflectionClass::newInstanceWithoutConstructor()でコンストラクタ

元記事を表示

Laravelでresource使用してる時のroute()とかの一覧

# Resource & route()

いつも書き方忘れてハマるので自分用に備忘録

## Blade

### index(一覧画面)

`リンク`

“`php
一覧画面へのリンク
“`

### create(作成画面)

`リンク`

“`php
作成画面へのリンク
“`

### store(作成処理)

`form`

“`php

@csrf
“`

### show(詳細画面)

`リンク`

“`php
$user_id]) }}”>詳細画面へのリンク
“`

### edit(編集画面)

`リンク`

“`php

元記事を表示

本日の学習内容part4

##参考記事
yaaabu51さんの[【PDO】PHPでデータベースに接続する方法【INSERT編】](https://qiita.com/yaaabu51/items/11d09c0219907e63a484)

##調べたメソッド
prepareメソッド⇒prepareの後の括弧内にあるSQL文を実行する準備をする。
executeメソッド⇒SQL文を実行する。
fetchメソッド⇒該当データを1行だけ取得する。

“`
$messages = $db->prepare(‘SELECT * FROM posts WHERE id=?’);
$messages->execute(array($id));
$message = $messages->fetch();
“`
間違えていましたら遠慮なく仰って下さい。m(__)m

元記事を表示

PHPでデータベースに使ってみるための備忘録

##はじめに
LAMP環境を整えてPHP使っておきながらPHP内でのデータベースの使い方がわからなかったので、忘れないようにまとめておきます。

簡単なスタッフの追加ページぽい何かとスタッフ一覧ページぽいものを作りながら簡単にまとめておきます。

###準備
phpMyAdminを使ってデータベースに簡単なスタッフ管理を想定したテーブルを作ります。
カラムは3つで「code,name.password」のカラムを作ります。このうちcodeを主キーにします。
データの方などは以下の画像を参照してください
![Screenshot from 2020-03-26 10-00-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584794/bf33ca2d-d9a7-28cd-ec71-0f4373b789fe.png)

##作ってみる
####スタッフ追加ページ
まずはスタッフ追加ページを作ります。
スタッフ名とパスワード・確認用パスワードを入力する欄をHTMLで用意します。

“`html:staf

元記事を表示

【wordpress】【css】【PHP】cssが更新されないor読み込まれない

メモです

[CSSの読み込みはどこに書く?WordPress公式マニュアルに書かれている正しい手順。](https://www.at-freak.jp/column/wordpress_css/)

以下、追加

“`php:functions.php

function add_css_js() {//関数名add_css_js()を作成
//CSSの読み込みはここから

//全てのページにstyle.cssを読み込み
wp_enqueue_style(‘style’,get_template_directory_uri().’/style.css’,”,date(‘YmdGi’, filemtime( get_template_directory().’/style.css’ )),” );

//全てのページにcss/store.cssを読み込み
wp_enqueue_style(‘store’, get_template_directory_uri().’/css/store.css’);

//固定ページスラッグcontact か 投稿ID46の

元記事を表示

Laravel Paginate

##ページネーションメソッドを使ってページャの実装

“`HogeController.php
use App\Models\Hoge; #Hogeモデルがある前提

$hoges = Hoge::paginate(5);
return view(‘hoge.index’, [‘hoges’ => $hoges]);
“`

“`style.scss
.page ul li{
display: inline;
}
“`

“`hoge/index.blade.php
@foreach($hoges as $hoge)

{{ $hoge->id }} {{ $hoge->name }} {{ $hoge->email }} {{ $hoge->age }}

@endforeach

{{ $hoges->links() }}
元記事を表示

LaravelでTDDを始めよう

LaravelでのUnitTestを始めよう

TestUnitを始める上で勢いで始めないように設計しましょう。

・基本的に読むべきこと
https://phpunit.readthedocs.io/ja/latest/
https://readouble.com/laravel/5.5/ja/testing.html

アンチパターンとベストプラクティス
https://www.ryuzee.com/contents/blog/3982

1. テストの中で何もテストしていない
書きかけの場合は、テストに未完成の印をつけるなどしましょう
https://phpunit.readthedocs.io/ja/latest/incomplete-and-skipped-tests.html

2. 1つのテストメソッドの中で色々テストし過ぎている

3. 引数に真にしたい条件を与えてなんでもassertTrueでチェックしている
@dependsアノテーションを使ってテストの実行順序を制御しつつ分割を行うべきです。

4. テストデータのパターンが複数あるのを理由に1つのテストの中で順

元記事を表示

Mac Laravelのライブラリ「laravel-dompdf」を日本語表示に対応させる

# 目的

– Laravelにライブラリ「laravel-dompdf」を入れたが、日本語化されない問題があったため改善する

# 実施環境

– ハードウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| OS | macOS Catalina(10.15.3) | |
| ハードウェア | MacBook Air (11-inch ,2012) | |
| プロセッサ | 1.7 GHz デュアルコアIntel Core i5 | |
| メモリ | 8 GB 1600 MHz DDR3 | |
| グラフィックス | Intel HD Graphics 4000 1536 MB | |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | |
| Laravel バージョン | 7.0.8 | |

– ライブラリ環境

| 項目 | 情報 | 備考 |
| — | — | — |
| laravel-dompdf | v0

元記事を表示

EC-CUBE4 プラグインの作り方 ~ セットアップからインストールまで

## EC-CUBE4向けプラグインの作り方
プラグインは、`composer.json`だけあれば作れる。

まずは`MyPlugin`というフォルダを作って、その中に`composer.json`ファイルを入れる。

必要な設定項目は、name、version、desctription、codeのみ。他は固定。

`app/Plugin/MyPlugin/composer.json`

“`json
{
“name”:”ec-cube/MyPlugin”,
“version”:”1.0.0″,
“description”:”my plugin”,
“type”:”eccube-plugin”,
“require”: {
“ec-cube/plugin-installer”: “~0.0.6”
},
“extra”:{
“code”:”MyPlugin”
}
}
“`

## 作成したプラグインをインストールする
プラグインをインストールするにはコマンドラインを使うか、いったん圧縮して管理画面からインストールする。

“`
//

元記事を表示

少し奇妙なPHPの不等号

ひょんな拍子に、PHPの不等号に関する恐ろしい事実を発見してしまいました。

## まずは穴埋め

“`php
$a = (略);
$b = (略);

if($a < $b && $b < $a) { echo 'まさかこんなところには来ないよね'; } ``` 実は、`$a < $b && $b < $a`という式を成立させてしまう方法が存在します。 ## 配列の比較 ふつうの変数であれば比較基準は1通りなので、`$a < $b && $b < $a`なんていう事態に陥ることはないのですが、そうは問屋が卸さないのがPHPです。PHP標準で、**配列**にも比較基準を用意しています([PHPマニュアル](https://www.php.net/manual/ja/language.operators.comparison.php))。 * 配列の要素数が異なる場合、要素数が少ないほうが小さい * 要素数が同じ場合、キーを順に比較していって中身の大小で比較する(同じキーがなければ判定不能) そして、PHPの連想配列はキーの順序が保存される、ということで、「同じキーがある

元記事を表示

PHP ユーザー関数定義 引数 スコープ などなどメモ

##記事を書いた人
PHP勉強中の初心者です。
はじめてユーザー関数を使ってコードの短絡化に挑戦した時に混乱したことをまとめてみました。

###記事の対象者
自分と同じような初心者の方のお役に立てればと思います。

##開発環境
PHP 7.3.11
OS macOS Catalina ver. 10.15.3

##関数とは
変数を「値を入れる箱」というならば、関数は「一連の処理を入れておく箱」のようなイメージでしょうか。

関数には2種類あります。
1. 組み込み関数
2. ユーザー定義関数

組み込み関数とは、PHPに元々用意してある関数のこと。例えばmb_strlen()とかisset()とか。
膨大な数の関数が用意されています。

ユーザー定義関数とは、自分で作る関数です。
作成するメリットとしては
1. 繰り返し登場する処理を何度も書かずに済む
2. 繰り返し登場する処理に編集が必要になった際、関数化してあれば関数を編集するだけで済む
3. コードの短絡化が出来て、可読性が上がる
といったところでしょうか。

“`php:function.php
functio

元記事を表示

OTHERカテゴリの最新記事