PHP関連のことを調べてみた2021年02月15日

PHP関連のことを調べてみた2021年02月15日
目次

PHP5上級試験/準上級試験の上級合格に挑戦(1) 試験研究

# 自己紹介と受験背景
+ 学生時代から今まで、プライベートでの活動の一つとしてWebサイトを作り運用してきている
+ 本来の業務では使ったことはないが、フロントエンドエンジニアで必要なことは一通りできる
+ その一方で、入社後からずっとマクロを学び業務としてきたマクロ屋
+ 現在の環境でPHPについて学ぶ必要があり、その過程で自然と上級試験を受けることに
+ PHPは関数とか書き方とかはマクロと似ているところがあり、基礎のところは理解している
+ しかし業務ではまだまだ使えていない
+ PHP7初級試験は合格済(上司がPHP5でなくて最新が7だからそれを受けて、と言われた)
+ その後、PHP7上級は2021年2月の時点でまだなく、PHP5上級を受けることに
+ 一応準上級までは合格済(かなりぎりぎり)
+ 文法とかクラスとかは一応理解はできているが、DBや拡張モジュールとかになるとわからない
+ 試験を受ける以上、暗記はしたが、知識として理解できているとは言い難い
+ たとえばどんなときにこの知識を使えばいいのかイメージできていない
+ PHPをきっかけにバックエンドエンジニアとし

元記事を表示

Navberが動作しない。ドロップダウンが動かない。

##問題発生##
bootstrapのNavberのドロップダウンリストがうまく動かない。
レスポンシブルで画面を小さくすると、nav-itemが表示されない。消えてしまう。

##結論##
navbar-lightを消していたので動かなかった。

CSSでいじったりする際に消してしまっていた。

“`html

//1行目のnav class内の navbar-light が必要。消してはだめ

元記事を表示

authComponentのidentifyメソッドの中身の流れをざっくりと見ていく

この記事ではCakePHPのAuthComponentのメソッドであるidentifyメソッドの中身の中身をざっくりと見ていきます。

### identifyメソッドとは

> リクエスト中の認証情報を使用してユーザーを識別するために、 $this->Auth->identify() を 手動で呼ぶ必要があります。

> ユーザーを認証する際には、設定されている認証オブジェクトを設定された順にチェックしていきます。 あるオブジェクトでユーザーが識別できたら、以降のオブジェクトはチェックされません。
>
[cakephp Bookより](https://book.cakephp.org/3/ja/controllers/components/authentication.html)

注意

– versionは3.9.6です
– AuthComponentは4.0から非推奨です
– あくまでも流れなので詳しく知りたい方はソースコードを追ってみてください

コード

“`
public function identify()
{
$this->_setD

元記事を表示

【デザインパターン】Factory Methodパターン・Builderパターン

# はじめに
オブジェクト指向プログラミングのデザインパターンを学習した際の個人的な記事です。
今回は「Factory Method」および「Builderパターン」について学習しました。

## Factory Methodパターン
* 「ペアになるオブジェクトを用意するメソッドを定義する」方法
* クラスの内部で、別のサブクラスのインスタンスを生成するためのメソッドを定義する
* サブクラスと別のサブクラスの結合度が高い場合に有用
* 別のサブクラスを単独でも呼び出す場合、インスタンス化を別クラスで行う理由がわかりにくい
* クラスを継承してサブクラスを作成する場合に用いられる

**コード例**
Macbookの抽象クラスを継承する「MacBook2019」「MacBook2020」は、
それぞれ搭載されるCPUが異なるが、「createCpu」でCPUのオブジェクトを個別に紐付ける。

“`php:FactoryMethod.php

元記事を表示

新しく追加されたクエリビルダーのsoleメソッドとは

#はじめに
Laravelのバージョンが**8.23**以上からクエリビルダーに`sole`メソッドが導入されています。
soleメソッドは**単一レコードに一致する場合のみ、一致したレコードを取得します。**一致しない場合は例外エラーが発生します。
この記事は簡単なデモを通じて下記内容について解説しています。

* soleメソッドの使い方について
* データ取得メソッドのfirst、get、soleの違いについて

#事前準備
予め`user`テーブルに次の値をセットしています。

“`
+—-+——-+——————–+——————-+————————————————————–+—————-+———————+———————+
| id | name | email | email_verified_at | password

元記事を表示

[PHP×PostgreSQL]DBのレコードをCSV出力する

PHPで、DBから取り出したレコードをCSV出力するサンプルコードです。

## 環境
* OS: Amazon Linux2
* PHP: 7.4.11
* PostgreSQL: 11.5

※今回は、[Amazon Linux2でLNPP環境を構築する | Qiita](https://qiita.com/C_HERO/items/7563d8e7fcbe63754e90)で構築した、LNPP環境を使用しています。

## ディレクトリ構成と処理概要

“`
/product/share
|
ccc
|—-dbCsv.php → 処理プログラム
|
|—-config.ini → 設定ファイル(PostgreSQLへの接続情報を記載)
|
|
|—-csv
|—-data_[yyyymm].csv → 出力CSV(yyyymm形式:年月ごとに出力, 文字コード:SJIS)

元記事を表示

Attempt to read property on nullの解決

LaravelでAttempt to read property on nullが出た話

記事内容

本記事ではLaravelで自作の認証機能を実装していた際に、本題のエラーが出たので、その解決方法を書き下ろします。

開発環境

Laravel 8.22.1
PHP:8.0.1
MySQL:8.0.23
MacOS:11.1 ( Big Sur )

やろうとしていること

ビューで入力フォームと、データベースにcompaniesテーブルを作成し、
ユーザーから入力された値と、テーブルに格納されているデータ(カラム:company_id)と一致するものがあれば、ページを遷移させる。
一致するものがなければ、簡単なエラーメッセージを返すというもの。

テーブル

“`○○_create_companies_table.php

元記事を表示

Laravelで画像を保存 / 取得する

Laravelで画像の保存 / 取得を実装する

記事内容

Laravelではデータベースを使って、画像の保存/取得などを実装できます。
今回は画像の保存から表示まで実装していきます。

開発環境

Laravel 8.22.1
PHP:8.0.1
MySQL:8.0.23
MacOS:11.1 ( Big Sur )

やろうとしていること

  1. ビューでformを作り、画像をアップロード。
  2. Controllerで画像を保存。
  3. 保存した画像を取得。
  4. 画像をビューで表示。

画像のアップロード

ビューでformを作る

“`○○.blade.php


元記事を表示

herokuへのデプロイでfailed to push some refs to …のエラー

#環境
PHP : 7.1.3
Laravel : 5.7
docker-compose.yml

“`
#docker-compose.ymlのバージョン
version: ‘3’
#docker volumeの設定
volumes:
docker-volume:

#services以下に各コンテナの設定を書く
services:
#Webサーバーのコンテナ
web:
image: nginx:1.18
ports:
– ‘8000:80’
volumes:
– ./server:/var/www
– ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
– php

#アプリケーションのコンテナ
php:
build: ./docker/php
volumes:
– ./server:/var/www

#データベースのコンテナ
db:
image: mysql:5.7

元記事を表示

【PHP】無名関数内でスコープ内の変数を使いたい場合

PHPを書いているときに、無名関数内で該当スコープで使用している変数を使用したいケースがあったので、まとめておきます。

## ダメな例
下記のように記述するとNULLが出力されてしまいます。

“`php
$hoge = 1;
$hoge_func = function () {
var_dump($hoge);
};
$hoge_func();
“`

“`php:出力結果
NULL
“`

これは、無名関数内のスコープでは、$hogeが定義されていないからです。

## 正しい例
無名関数のスコープ外で使用されている変数を使用したい場合には、下記のように書きます。

“`php
$hoge = 1;
$hoge_func = function () use($hoge) {
var_dump($hoge);
};
$hoge_func();
“`

“`php:出力結果
int(1)
“`

## まとめ
PHPだからよしなにやってくれるだろうと高を括らず(?)、きちんと使用する変数はuseで定義するようにしましょう。

元記事を表示

LaravelでViewインスタンスに渡した値を取り出したい

# はじめに
こんにちは。昨日の地震、皆さまご無事でしてでしょうか。自分自身も周りの人も無事でほっとした筆者です:pray:

さて、共通で使用したい値をVIewインスタンスにあらかじめセットした際に、あとで取り出して使いたいケースがあったので、方法を共有します(そんなケースあるのか:thinking_face:、と思うのですが、あったんです…)。

# 結論
“`php:Controller.php
$data = [];

// Viewインスタンスに共通で値をセット.
view()->share(compact(‘data’));

// Viewインスタンスから値を取り出す.
$data2 = view()->shared(‘data’);

// Viewインスタンスを返却.
return view(‘home’);
“`

# おわりに
上記のような使い方はしないと思います。
私のこれを使用したケースは、**親Controller**で共通値をセットして、その値が**子コントローラー**で上書きされるものの、元の値も必要だったので、取り出して別名でセットし直すケース

元記事を表示

No application encryption key has been specifiedを解決する

#エラー発生
ソースコードをcloneした後に、ローカルでサーバーを立ち上げてページアクセスすると画面に**「500 | SERVER ERROR」**が表示。

#原因調査

`storage/logs/laravel.log`でエラー内容を確認します。
エラーの原因は下記の通り。

“`:storage/logs/laravel.log
[2021-02-14 03:34:41] production.ERROR: No application encryption key has been specified. {“exception”:”[object] (Illuminate\\Encryption\\MissingAppKeyException(code: 0): No application encryption key has been specified. at /Users/******/dev/laravel-project/laravel-blade-sortable-demo/vendor/laravel/framework/src/Illuminate/E

元記事を表示

フレームワークとライブラリ 違い

Webアプリケーションフレームワーク

は、Webアプリケーションの土台となるプログラムのことです。Web開発を何度か経験しているとわかりますが、似た処理というのがいくつも出てきます。Web開発における共通処理をまとめあげたものがWebアプリケーションフレームワークとなります。共通処理を書かなくて良いので、労力が削減され効率的に開発できるのです。

また、ライブラリとフレームワークの違いを知っておくことも重要です。ライブラリが「ユーザの書いたプログラムによって 呼び出される 」側なのに対して、フレームワークは「ユーザの書いたプログラムを 呼び出す 側ということです。つまり、ライブラリはユーザの意思によって取り出す便利な道具(ライブラリをどう使うかはユーザ次第)です。しかし、フレームワークは取り出し可能な便利道具という範疇ではなく、フレームワークという巨大な土台(ルール)の上でユーザプログラムが動くため、ユーザはフレームワークのルールに沿って開発をしていかねばなりません。

ライブラリと比較すると、制御の逆転(主従の逆転)が起こっています。なんだか「フレームワークにプログラ

元記事を表示

猫の写真と日記投稿サイト ページネーション

###diaries.controller index部分

public function index()
{

$data = [];
if (\Auth::check()) {
$user = \Auth::user();
$diaries = $user->diaries()->orderBy(‘created_at’, ‘desc’)->paginate(25);
return view(‘diaries.index’, [
‘diaries’ => $diaries,
]);

$data = [
‘user’ => $user,
‘diaries’ => $diaries,
];
}

return view(‘welcome’, $dat

元記事を表示

【PHP】コメントアウト

###・`//`
行頭から行末までの1行をコメントアウト。一般的によく使用するタイプ。

“`php

“`

###・`/* */`
複数行をコメントアウトする場合によく使用。

“`php

“`

###・`#`
行頭から行末までの1行をコメントアウトするときに使用。シェルやCSVファイルのコメントでよく使用される形式。

“`php

“`

#参考
* [【PHP入門】コメント・コメントアウトの使い方を解説](https://www.sejuku.net/blog/25940)

元記事を表示

多次元配列から特定の値を取り出す方法

routeが’love’の配列のnameの値を取得したいとする。

“`php
$genres = [
[‘route’ => ‘jobs’, ‘name’ => ‘仕事’],
[‘route’ => ‘life’, ‘name’ => ‘日常’],
[‘route’ => ‘relationship’, ‘name’ => ‘人間関係’],
[‘route’ => ‘dozi’, ‘name’ => ‘どじ’],
[‘route’ => ‘shame’, ‘name’ => ‘恥’],
[‘route’ => ‘school’, ‘name’ => ‘学校’],
[‘route’ => ‘love’, ‘name’ => ‘恋愛’], // ここのnameの値を取得したい!
[‘route’ => ‘marriage’, ‘name’ => ‘結婚生活’],
[‘route’ => ‘game’, ‘name’ => ‘ゲーム’],
[‘route’ => ‘disease’, ‘name’ => ‘病気’],
[‘route’ =>

元記事を表示

MediaWikiのに任意の内容を挿入するHeadScriptエクステンションを指定したページのみに適用する方法

MediaWiki において `` 要素に `