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

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

Laravel バリデーションルールsizeで文字数があっているのにバリデーションエラーが出る

# 目的

– バリデーションを実装中にバリデーションルール「size」で指定した文字数と一致しているのにエラーが出てしまう問題をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| 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.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https:

元記事を表示

【PHP/キャスト】型指定を意識する

##はじめに
PHPで実装する時、型指定は意識していますか。
PHPでは変数に文字列を入れればその変数はstring型になり、また整数を入れればint型になります。

>PHP は、変数定義時に明示的な型定義を必要と(または、サポート) しません。ある変数の型は、その変数が使用される文により定義されます。 これは、ある文字列を変数 var に代入した場合には、 var は文字列になることを意味しています。 ある整数値を var に代入した場合には、 その変数は整数になります。
引用:[PHP: 型の相互変換 – Manual](https://www.php.net/manual/ja/language.types.type-juggling.php)

なので変数の型が自動で決まるので意識していないという方もいるかと思います。
しかし予期せぬエラーが起きたり、TypeScriptなど型指定が厳密な言語で実装する時にも困らないようにするためだったりと日頃から型指定は意識しておきたいですね。

##キャストで強制的に型を変更する
PHPで型を変更したい時はキャストすることで可能です。

元記事を表示

「確定する」の命名

# 選択肢

### commit

データベース用語でコミット(=確定する)という用語があります。
個人的には本命馬。
ただ、データベースと関係ない箇所で使うと「commit?」ってなって、単に「遂行する」の意味と勘違いされる可能性もあります。

### confirm

良さそうですが、「確認する」という意味も強そうです。
「相手に聞くことで」確定させるというイメージがあります。

### fix

エンジニア的には「微修正する」の意味が強そうです。

### establish

なんか建ててないですか?

### decide

なんかキメてないですか?

### determine

Google検索で真っ先にコレが出たけど、マですか?

# 試しに書いてみた

“`PHP
// ユーザが登録処理を確定させる

$user->commitRegistration()

$user->confirmRegistration()

$user->fixRegistration()

$user->establishRegistration()

$user->decideReg

元記事を表示

JavaScriptとPHPの記載方法の違い

### 変数
| 処理 | JavaScript | PHP |
|:–|:–|:–|
|変数宣言| let name 
const name | $name |
|変数埋め込み|`私は${name}です` |”私は{$name}です”|
|変数連結|name + “です”.|$name.”です”|

### 配列
| 処理 | JavaScript | PHP |
|:–|:–|:–|
|配列の末尾に追加 | names.push(“太郎”); | $names[] = “太郎”; |
|配列の長さ取得| array.length;|count($array);|
|配列の作り方|const array = [“apple”, “orange”, “banana”];|$array = array(“apple”,”orange”,”banaan”);|
|連想配列(js:オブジェクト)の作り方|const obj = {name: “太郎”, gender: “男性}; |$obj = array(“name” => “太郎”,”gender

元記事を表示

PHPで超簡易ルーティング

まずはじめに

「こんなんルーティングっていうのか?(´・_・`)」

というツッコミは、甘んじて受けます。**てか、推奨します。**

「推奨するの?(´・_・`)」

## やりたいこと

例えば

**/pages/index.php?page=1**

みたいなURLではなく

**/pages/1/**

で処理をしたい。ただそれだけ。
それだけですってば(´・_・`)

## .htaccess

プログラム単体でできるハナシではなく、サーバ側で、変なURLを受け付けても404にせずにindex.phpで処理をするように制御する必要があります。
そのために、.htaccessの設定をします。

“`

RewriteEngine On
RewriteBase /pages/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /pages/ind

元記事を表示

【CakePHP】$this->request->query()はちゃんとURLデコードされている

## 検証した環境
・CakePHP2
・CakePHP3.8

## なぜこの記事を書いたか

タイトルの通りです。
GETパラメーターを渡し、コントローラーで`$this->request->query()`で受け取ること、良くあると思います。
その際、GETパラメーターにURLエンコードされた値を渡すことがあります。
そしてそのGETパラメーターを、コントローラーで`$this->request->query()`で取得すると、いつの間にかURLデコードされた値になっています。

“`:例
// ユーザーIDをカンマ区切りで複数渡したい時
// 1234,5678,9012 をURLエンコードしてGETパラメーターで渡す。
https://sample.com/users/index?user_id=1234%2C5678%2C9012

// コントローラーでuser_idを取得
$user_id = $this->request->query(‘user_id’);

// 取得したuser_idの中身は、「1234,5678,9012」になっている。
 (URLデコードさ

元記事を表示

「CodeIgniter4 じゃなくて Laravel に行きたい」と,ひそかにアップグレードを企てている CodeIgniter 開発者に伝えたい,Laravel の魅力

# 概要

CodeIgniter を使った業務は,それなりにこなしてきたものの,**職場での採用フレームワークが CodeIgniter だから,なかなか Laravel へ触れる機会がない**というエンジニアを意識して,Laravel の世界を紹介するような記事を書こうと思いました。

おじさん自身,Laravel は入門一ヶ月未満の立場ですが,**初学者だからこそ,上級者には書けない視点で,平易に記述できることもあるだろう**というポイントに意味を見出し,キーボードに向かっています。

まずは,超絶簡単な例題を使って,CodeIgniter と Laravel のソースを対比させようと思います。

連載は,あるかも知れないし,ないかも知れないという,無責任企画シリーズです。

そして,マサカリ歓迎案件です(いろいろ教えてください)。

# CodeIgniter で書いたソース

まずは,これ以上ないほど,シンプル(だけど,ちゃんとした MVC 構造)なコードを書きます。

`localhost` でアクセスしたら,”Hello CodeIgniter!” と表示するだけのページ

元記事を表示

何なのだ『例外』とは?どう使えばいいのだ!?

# 例外処理 使ってますか?

プログラミングの解説で登場する例外処理。
何となく仕組みは理解はできたものの、実際に使うとなると難しいですよね。

**使わなくても動くし!**

**try-catchとかExceptionとか書くのが面倒!**

私も最初は使いどころが分からなかったのですが、
他のコードを見て勉強しているうちに「例外処理を使えばもっと良いコードが書けそう」というのが分かってきました。

そこでどのような時に例外処理を使うのか、まとめてみます。

※ PHP言語を使って説明しますが例外処理の基本はだいたい同じだと思います。

# お釣りを計算する関数

商品価格`$price`と支払額`$payment`を渡してお釣りを計算する関数を実装します。
ただし、商品価格に対して支払額が少ないケースもありえます。

“`php
function calChange(int $price, int $payment): int
{
return $payment – $price;
}

$change1 = calChange(900, 1000); // 100

元記事を表示

FuelPHPでcurlを使う

pure PHPでもcurlは使えますが、せっかくFuelPHPを使っているのであればFuePHPにあるクラスを使ってみたいという感じです。

まずはpure PHPで。

“`curl.php
$curl = curl_init();//curlセッションを初期化
curl_setopt($curl, CURLOPT_POST, TRUE);//メソッドがPOSTの場合必要。GETなどならいらない
curl_setopt($curl, CURLOPT_URL, $url);//URLを指定
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);//POSTするデータ
curl_setopt($curl, CURLOPT_USERPWD, “$username:$password”);//認証に必要なID、パスワード
$execute = curl_exec($curl);//実行
curl_close($curl);//curlセッションを閉じる
“`

最低限ですがだいたいこんな感じになると思います。これをFuelPHPのRequest_C

元記事を表示

FuelPHPでAjax使ったときの値の見方

Ajax使って非同期でデータのやり取りを実装するとき、
「403エラー出てるけど具体的にどういうエラーなん?」
ってなったときとかに見る方法です。

“`example.php
$value;//おそらく原因であろう変数
var_dump($value);
exit();
“`

`var_dump()`は引数の情報(値、型など)を表示する関数です。`exit()`は現在のスクリプトを終了する`言語構造`というらしいです。関数とは違うんだとか。
参考→https://www.php.net/manual/ja/function.exit.php

非同期かどうかにかかわらずデバッグするときに使えそうですね。

元記事を表示

LaravelとVue.jsの連携

#LaravelとVue.jsの連携

Qiita初投稿です。
最近覚えることが多いのでアウトプットしていきながら理解を深めようと思います。

##環境
– PHP 7.3.11
– laravel/framework 6.2
– vue 2.6.11

##手順
1. Laravelプロジェクトの作成
2. laravelとVue.jsの連携
3. 立ち上げ

##Laravelプロジェクトの作成
Composerのインストールに関しては完了している前提で書いております。

まずlaravelのプロジェクトを作成していきます。
下記のコマンドを実行しましょう。プロジェクト名は自分のプロジェクト名に変えてください。

“`
$ composer create-project –prefer-dist laravel/laravel プロジェクト名
“`

プロジェクト作成が完了したら

“`
$ cd プロジェクト名
“`

cdコマンドで該当プロジェクトまで移動します。
そしてローカルサーバーを立ち上げるために下記のコマンドを実行します。

“`
$ php arti

元記事を表示

guzzleでHttp通信をするときにcurlでいう–noproxyオプションを使用する

requestを呼ぶときに

“`
‘proxy’ => ”
“`
をoptionsに指定すればOK。

“`php5
$client = new \GuzzleHttp\Client();
$method = ‘POST’;
$url= ‘http://url.com’;
$options = [
‘form_params’ => [
‘param1’ => ‘AAAAA’,
‘param2’ => ‘BBBB’,
‘param3’ => ‘CCCC’,
],
‘proxy’ => ”
];
$response = $client->request($method, $url, $options);

元記事を表示

PHP ファイルの内容を書き込み、読み込み

##ファイルの書き込み
file_put_contents(“ファイルの場所”,”書き込みたい内容”);
file_put_contentsは戻り値を持つためif文でチェック可能

“`php:qiita.php

“`

##ファイルの読み込み
file_fet_contentsの戻り値が読み込んだデータとなる

“`php:qiita.php

“`

read_fileでは戻り値をprintしなくても出力できる
この場合は、読み取ったデ

元記事を表示

【PHP8】Docker で PECL の YAML 関数(YAML パーサー)をインストールして使う

PHP の [YAML 関数](https://www.php.net/manual/ja/ref.yaml.php)は標準で PHP にバンドルされていません。

YAML 関数で、YAML データを PHP 配列にパース(構文解析して変換)、もしくは PHP 配列から YAML データにパースするには [PECL の拡張ジュールをインストールする必要があります](https://www.php.net/manual/ja/yaml.installation.php)。

しかし、最新(2020/08/28 現在)の `php:8.0.0beta2` および `php:8.0.0beta2-alpine` イメージには PECL はインストールされていません。[PHP 7.4 以降から PEAR/PECL インストーラーは排除された](https://externals.io/message/103977)ようです。

## TL; DR

PECL をソースからビルドする必要があるのですが、それも面倒なので `pecl` コマンド入りのイメージを作成しました。

“`bash

元記事を表示

INDEXを削除するには外部キー制約を外してから

#INDEXを削除するには外部キー制約を外してから

MySQLで設定したINDEXを削除しようと思ったら
下記のエラーが。
結構、手間だと感じたので手順をメモしておく。

“`
ERROR 1553(HY000):Cannot drop index ‘INDEX名’: needed in a foreign key constraint
“`

どうやら外部キーが設定してあるためINDEXが削除できないらしい。

ということは...
外部キーが設定してあるカラムのINDEXを削除するには
外部キー削除⇒INDEX削除⇒外部キー再設定の手順が必要!
ちなみに外部キーを削除するために外部キー名の確認も必要となる。

手順としては
**外部キー名確認**

“`
SHOW CREATE TABLE テーブル名;
“`

**外部キー削除**

“`
ALTER TABLE テーブル名 DROP FOREIGN KEY 外部キー名;
“`
**インデックス名確認**

“`
SHOW INDEX FROM テーブル名;
“`

**インデックス削除**

“`
ALTER

元記事を表示

WordPressのインフラ構成とバグ(現在オフラインです/ブロックエディタが非アクティブ)

#(症例1)公開に失敗しました。 現在オフラインのようです。
投稿ボタンを押したときに、
>公開に失敗しました。 現在オフラインのようです。

と表示されます。
色々解決法はあるようですが自分の場合は、
設定>一般にある
WordPress アドレス (URL)とサイトアドレス (URL)を

“`
http://hogehogeooooo.com
から
https://hogehogeooooo.com
に変更
“`
することで解決しました。

#(症例2)ブロック追加が非アクティブ
こちらが今回のメインテーマです。
WordPressの新しいものは従来のHTML編集のみならずGutenbergというブロックエディタを使用することが可能です。
参考:)
HTML編集
![スクリーンショット 2020-08-28 12.20.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/320677/950352d9-97c8-0c69-d975-1c7bfc

元記事を表示

PHPでいい感じのランダム文字列を作る

暗号学的にも強いランダムな文字列を作る方法。
他にもいろいろ方法があるけどひとまず `openssl_random_pseudo_bytes()` を使ってみた。

“`php:random.php
/**
* 指定された桁数のランダム文字列を生成する
* (古い環境では暗号学的な強さにならない場合もあるが、ほとんどの環境は問題ない)
*
* @param int $length 求める文字列の長さ(桁数)
* @param string $chars ランダム文字列に使用したい文字一覧
*/
function randomstr($length, $chars)
{
$retstr = ”;
$data = openssl_random_pseudo_bytes($length);
$num_chars = strlen($chars);
for ($i = 0; $i < $length; $i++) { $retstr .= substr($chars, ord(substr($data, $i, 1))

元記事を表示

CakePHP Training(公式) 受講メモ

先日cakephpの公式ウェビナーを受講しました。様子や感想をメモしておきます。

###2ドルでした
https://training.cakephp.org/
現地時間の午後4時なので0時から3時間すね
###cakephpの主要なcommitter
jose gonzalez さん直々に
https://github.com/josegonzalez
初心者向けのチュートリアルを実施
しながら、ずっと説明してくれています
###「cakephpあるある」とか
はさんでくれます
テーブルを変更しても
entityをbakeし直さないと反映されないので
formが動作しないから気をつけてねとか
言ってますね
###細かいところまでご存知なので
知らないければ使わない便利関数
Text::toList()とかdd()とか
知れてよかったです
###一番驚いた機能は
debug barのhistoryで遡って save() の sql log が
見られたことです
###初心者向けウェビナーということで、
ターゲット外のフレームワーク全体の質問
は受け流しているのが面白かったです
「ca

元記事を表示

JIRA APIを使用してslackに直近のリリース案件を通知しよう with PHP

# 課題定義
Jiraでたくさんの案件管理をしていると、どの案件がリリースがいつあるのか忘れることがよくあります。

– え、明日リリースだっけ?
– このページバグってるんですけど、今日誰かリリースしたんですか(同チームより)
– 同じコンテンツでリリースあるの知らなくてgit-flowのリリースブランチ作っちゃったんですけど・・・

などなど、リリース日をチーム間で把握していないと上記のような事象が発生していました。

# 解決策
これらの課題を解決するためにJiraAPIを使用して直近のリリース日を通知する機能を作ってみました。

![jira.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153118/fd2fb21b-7b02-0d9a-2cfa-e4d712ca944f.png)

JiraAPIを叩いて、Webhookでslackに通知するだけです。

# 必要なもの
– Jiraのアカウント
– slackのアカウント
– slackのIncoming WebhookのURLを発行する(

元記事を表示

PHPでの三項演算子(if文に?(はてな)があるコード)について

#プログラミングの勉強日記
2020年8月28日
`?`(はてなマーク)の後に`:`がある式についてまとめる。`?`と`:`は、条件分岐の式を記述できる三項演算子(条件演算子)となる。記号は2つ使うが、演算子としては1つの演算子となる。

#書き方
 三項演算子では、演算の対象である被演算子を3つとり、`?`と`:`を以下のように書く。

“`:書き方
(条件式)? <真式> : <偽式>
“`

“`php:具体例
$num = 13;
echo ($num%2==0) ? ‘真’ : ‘偽’;

// 上記は以下と同じ
if ($num%2==0) {
echo ‘真’;
} else {
echo ‘偽’;
}
“`

#??マークとは(番外編)
 `??`はnull合体演算子と呼ばれている。これはnullかどうかを確認することができる。

#参考文献
[【PHP】?(ハテナマーク)と : (コロン)条件演算子|条件分岐を一行で記述](https://blog-and-destroy.com/7118)
[3

元記事を表示

OTHERカテゴリの最新記事