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

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

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

元記事を表示

【Laravel】 From句にサブクエリを使用する

# 結論
laravel 5.6.3から
joinSub、leftJoinSubが使える.

“`php
$subQuery = ProfileUserView::select([‘user_id’, ‘company_id’])
->whereBetween(‘created_at’, [$from, $to])
->distinct();

$mostViewQuery = \DB::query()
->selectRaw(‘company_id, COUNT(user_id) AS pv’)
->fromSub($subQuery, ‘sub’)
->groupBy(‘company_id’);
“`

## ver 5.6.3以前
それより以前は mergeBindings使う.

https://github.com/laravel/framework/issues/19711

“`php
$count = DB::table( DB::raw(“({$sub->toSql()}) as sub”) )
->merge

元記事を表示

【Laravel】 base64エンコードされた画像を保存する

“`php
/**
* 画像保存
* @param string $base64Context
* @param string $storage
* @param string $dir
* @return App\Models\Image
*/
public function storeImage($base64Context, $storage, $dir)
{
try {
preg_match(‘/data:image\/(\w+);base64,/’, $base64Context, $matches);
$extension = $matches[1];

$img = preg_replace(‘/^data:image.*base64,/’, ”, $base64Context);
$img = str_replace(‘ ‘, ‘+’, $img);

元記事を表示

セッション

“`値の保存
Request->session()->put(‘キー’, 値);
“`

“`値の取得
$変数 = Request->session()->get(‘キー’);
“`

sessionの格納先は
“`strage/framework/sessions“`になる。

##データベースでセッションを使う
下記設定に変更する

“`config/session.php
‘driver’ => env(‘SESSION_DRIVER’, ‘database’)
“`

“`.env
SESSION_DRIVER=database
“`

###コマンド実行
“`
php artisan session:table
“`

マイグレーションファイルが作成されるので“`php artisan migrate“`すればDBでセッションを扱えるようになる

元記事を表示

PHPでは関数の引数が多くてもエラーにならない

phpでは関数に引数を渡すときに定義されている数より多くてもエラーにはならないようです。

“`php
first:second

// 3つの引数だと呼び出せる
twoArgumentFunction(‘first’,’second’,’third’);
// => first:second
“`

引数の数が少ないと「Fatal error」が発生します。

“`php
// 1つの引数で呼び出すとエラーになる
twoArgumentFunction(‘first’);
// Fatal error: Uncaught ArgumentCountError: Too few arguments to function twoArgumentFunction(

元記事を表示

Elastic BeanstalkでのLaravelにてstorageへのシンボリックリンクを張る方法

# はじめに
Elastic BeanstalkでのLaravelにてstorageへのシンボリックリンクを張る方法で手こずったので備忘録です

# TL;DR
container_commandsにて「ln」を使用して、相対パスでシンボリックリンクを貼りました

# コード
“`.ebextensions/commands.config
container_commands:
0x_storage_link:
command: “ln -s ../storage/app/public storage”
cwd: “/var/app/ondeck/public”
“`

# 最後に
他に良い方法がありそうですが。。。

# 補足
「php artisan storage:link」でシンボリックリンクを貼ると絶対パスになりました。(参考サイトと同事象)

# 参考
[php artisan storage:link linking wrong directory](https://stackoverflow.com/questions/52288807

元記事を表示

Goodby/CSV 大量にデータをインポートすると、マルチバイト文字列が欠落する場合がある

自分用の備忘録

### 何が問題か

私が教えてほしいです。

大量に(400行ぐらい)データをインポートすると、1~数行、
日本語文字列が一文字(3バイト分)だけ欠落するという事象が発生した

原因は不明。誰か教えて

### 直し方

これを

“`
$config->setFromCharset(“UTF-8”);
“`

こうすれば直った

“`
$config->setFromCharset(NULL);
“`

### ソースコード

“`
/**
* Import Csv By Goodby\CSV Parser
* このメソッドはCSVの読み込みのみを担当し、加工はコントローラー側に任せる想定
*
* @param string $filePath
* @return array
* @link https://github.com/goodby/csv
* @link https://nori-life.com/laravel-csv-import-goodbycsv/

元記事を表示

WordPress ページによって読み込むcssを変える

#はじめに
wordpressでページごとに読み込むcssを変えたい!と思う事があるかもしれません。

実はphpの条件分岐を使えば、簡単にできるのです。:cop:
**今回は固定ページごとに**、読み込むcssを変える方法を紹介

#スラッグ(Slug)を確認
まずは固定ページのスラッグ(Slug)を確認

スクリーンショット 2020-03-25 18.55.29.jpg

`固定ページ一覧>クイック編集`から確認できるかと(無理だったら目的のページの編集画面まで行こう)

#header.phpで条件分岐

“`php:header.php

.省略
.
.
『NHKニュース速報』を取得して表示する

#はじめに
この記事は、日本の公共放送NHKのニュース速報を取得し、PHPで表示する方法を掲載しています。
**過度な取得は、提供元のサーバに負荷をかけることとなりますので、絶対にしないでください。**
また、あくまで取得して表示するまでの方法を掲載しています。表示デザイン等は一切考慮しておりませんので、ご了承ください。

#仕組み
NHKのニュースサイト「NHK NEWS WEB」のバックグラウンドで動作している「sokuho_news.xml」にアクセスし、データを取得します。
その後、echoを使ってデータを表示します。

#ソースコード
“`php:BreakingNews.php

    report->line as $line): ?>

OTHERカテゴリの最新記事