PHP関連のことを調べてみた2022年07月06日

PHP関連のことを調べてみた2022年07月06日

LaravelとauthorizeResourceが403しか返さなくなった原因と対処

# 先に結論
原因は`authorizedResource`と`Controller`の一部メソッド間で,引数名の不一致があったため.

“`diff:再現コード(一部省略済み)
class MessageController extends Controller
{
public function __construct()
{
$this->authorizeResource(Message::class, ‘message’);
}

– public function destroy($id) { … }
+ public function destroy(Message $message) { … }
}
“`
具体的には`destroy`メソッドだけ,引数が`Message $message`でなく`$id`となっていた.
その結果,`DELETE`リクエストだけ認可処理が通らず「絶対に403を返す」状態となった.

解決策はシンプルで,上の例の通り`Message $message`のような形式でresourc

元記事を表示

【PHP初級④】論理演算子4

[問題]
整数値を入力させ、その値が-10以上0未満、または、10以上であればOK、そうでなければNGと表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
if(($a >= -10 && $a < 0) || $a >= 10){
echo ‘OK’;
}else{
echo ‘NG’;
}
“`

↓「11」と入力

# 結果
“`
OK
“`

元記事を表示

LaradockのDockerfile〜バグについて

## 問題①
_Build時に下記の場所「RUN if [ ${INSTALL_AST} = true ]; then \」でexit code: 1が吐かれる_
###
“`Dockerfile:/laradock/workspace/Dockerfile 636行目
###########################################################################
# AST EXTENSION
###########################################################################

ARG INSTALL_AST=false
ARG AST_VERSION=1.0.10
ENV AST_VERSION ${AST_VERSION}

RUN if [ ${INSTALL_AST} = true ]; then \
# AST extension requires PHP 7.0.0 or newer
if [ $(php -r “echo PHP_

元記事を表示

cakephp3でDBのテーブルのリレーションの関係を整理する〜1対多編

## 命名規則
### DB
– テーブル名は小文字で複数形です。
– 複数の単語がある場合は、アンダースコアでつなぐ
– カラム名は小文字で単数形
– 複数の単語がある場合は、アンダースコアでつなぐ
– 外部キーカラムは`AAAAs(複数形)_id`
– 外部キーカラムを定義した場合、外部テーブルAAAAsが必要
– DBのテーブル自体にリレーションの定義は必要?→なくてもいい。というよりはなくても動く。でもあったほうがいいと思う。

## ①マスターテーブルパターン
Lessons belongs to Category
特にテーブル定義でリレーションは設定しないでやってみます。
“`sql
— テーブル定義
CREATE TABLE lessons (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
categories_id INT UNSIGNED
);

CREATE TABLE categories (
id INT UNSIGNED AUTO_INCREMEN

元記事を表示

【PHP初級③】論理演算子3

[問題]
整数値を入力させ、その値が-5以上10未満であればOK、そうでなければNGと表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
if($a >= -5 && $a < 10){ echo 'OK'; }else{ echo 'NG'; } ``` ↓「12」と入力 # 結果 ``` NG ```

元記事を表示

Docker内PHP開発環境(2022年水無月)[1/2]

# 初めに

いつもありがとうございます。
やっと時間がとれ、開発環境の整備編にとりかかれた。
まずは、PHPの開発環境を整える。

# 環境設定
VSCodeにてDockerコンテナを使って開発環境を構築する。メリットとしては以下のことを想定している。
– 環境がコンテナ内に制限され独立しており、開発者間の差異を防止しやすい
– ホストとなるPCには言語等をインストールする必要がない
– 複数のバージョンやOSの違いをコンテナを用意するだけで再現できる
– 最終実行環境に近い状態で動作確認ができる

## PHP開発用コンテナ
VSCodeにて、PHPおよびMySQLが動く環境をDockerコンテナで作り、デバッグできる環境を整える一連の設定などを解説する。MySQLは以前に解説したDockerCompose版[^1]を使ってもいいが、独立した環境とするために専用のものを用意する。また、VSCodeとDockerとの相性でBindMountしたWindowsファイルシステムにソースを配置すると、、、途轍もなく、物凄く、耐えられないほどに、実行がおそくなるので、Volume専用のコンテ

元記事を表示

【PHP初級②】論理演算子2 ~AまたはB~

[問題]
整数値を入力させ、その値が-10以下、または、10以上であればOKと表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
if($a <= -10 || $a >= 10){
echo ‘OK’;
}
“`

↓「-15」と入力

# 結果
“`
OK
“`

☆論理演算子
$a==$b || $c==$d → $a=$bまたは$c=$d
※ || は or でも可

元記事を表示

【WordPress】Ajax通信で認証を行う

## 概要
WordPress の Ajax 通信において、nonce(ノンス)と referer(リファラー)を用いた簡単な認証方法をご紹介します。

## 環境
WordPress: 4.9.19
PHP:7.0.27
jQuery:2.2.4

## nonce(ノンス)とは
nonce(ノンス)は任意の文字列や現在時刻、現在のユーザーIDによって
作られるハッシュ値です。
nonce 値は予めサーバー側で上記の要素を元に生成したうえでフロントに渡し、Ajax リクエストを送る際にリクエストパラメーターに含めます。
そしてリクエストを受け取った際に再度同じ要素から nonce 値を生成し、送られてきた値と照合します。

ログインしているユーザーに対してはユーザーごとに一意の値が作成される一方で、非ログインユーザーに対しては渡した文字列に応じて常に同じ値が作成されます。

nonce の有効期限はデフォルトでは12~24時間ですが任意の値を設定することも可能です。
nonce の有効期限が切れていた場合は、同じ文字列から生成した値を照らし合わせても無効となります。
なお nonce

元記事を表示

Laravel8 .envの値を使う注意点

おっす、豚野郎です。

.envで設定した値をconfigを経由しないで取得する方法と、
configを経由して使う方法で取得する内容をサンプルコードと一緒に書いていきます。

# 1. configを経由しないパターン
以下のパターンで、envファイルに書かれた値は取得が可能です。
“`.env
TEST_ENV=TEST
“`

“`routes/web.php

元記事を表示

【PHP8.2】PHPで選言標準形 (Disjunctive Normal Form) 型が使えるようになる

[タイトルの意味](https://ja.wikipedia.org/wiki/%E9%81%B8%E8%A8%80%E6%A8%99%E6%BA%96%E5%BD%A2)はよくわからない。

さてPHPでは、[PHP8.0で型のOR](https://qiita.com/rana_kualu/items/f75e254553157d8eb0b7)、[PHP8.1で型のAND](https://qiita.com/rana_kualu/items/f49582bc94e0bae23d9c)が使えるようになりました。

しかし、この両者を組み合わせて使うことはできません。

“`php
function f(A | B | C $param){} // OK
function f(A & B & C $param){} // OK
function f(A | B & C $param){} // NG ←
“`

ということで、これを可能にしようというRFCが提出されました。

既に投票は終わっており、賛成多数で可決されました。
PHP8.2からDNF型が使用可能になります。

元記事を表示

[javascript][python][php]デフォルト(オプション)引数

仕事で身に付けた技術や仕事以外で身に付けた知識を、自分用の備忘録として投稿していきたいと思います。

# 今日の内容
会社で先輩方にしていただいた、Vue.jsで書いたコードのフィードバックで、javascriptのデフォルト引数を使ったので、備忘録として残します。

# 使うことになったきっかけ
空配列を初期値とした変数が、なぜか`Undefined`になってしまっていて、どこで`Undefined`が入ってしまっているのかわからなかったので応急処置として使いました。
(はじめは、`if`分岐で`Undefined`が入っていたときの処理を書いていました。デフォルト引数を使うことで、ネストが減りました)

# 使い方
至ってシンプル。引数に続けて`=デフォルト値`を書くだけ。引数が未定義だったとき、デフォルト値が引数にセットされる。
~~~ javascript:sample_undefined.js
//引数が未定義
function sum(x=0, y=0, z=0){
return x + y + z;
}

sum(); //0
~~~
~~~ javascript:s

元記事を表示

LaravelのBladeを、単純な文字列組み立てで使う

# はじめに
LaravelのBladeを使って、WebページのHTMLを組み立てたりすることは多いと思います。
ただ、出力する内容を単に文字列として変数に落とし込めないかを調べたところ、その方法があったので、備忘録的に記載しておきます。
# 通常の使い方
基本的な使い方として、HTMLを組み立ててページを表示する時には、以下のように書くことが多いかと思います。

Controller
“`
public function index() {
$data = [
‘content’=>’HELLO WORLD’,
‘name’=>’太郎’
];
return view(‘test,index’, $data);
}
“`

View(Blade.php)
“`



{{ $name }}さん、{{ $content }}



“`
これで、ページに「太郎さん、HELLO WORLD

元記事を表示

静的コード解析ツールのPHPMDを導入した話

# 目的
静的コード解析ツールのPHPMDの使用方法をまとめる。

# What is PHPMD ?

PHPMDを使用すると、次の4つを静的に解析できる。

* 潜在的なバグ
* 準最適な状態のコード
* 複雑になっているコード
* 未使用となっているメソッド、プロパティ

# 環境

* Docker 20.10.12 / Docker Compose 1.29.2 
* php 8.1.7
* phpmd/phpmd 2.12.0
* composer 2.3.7
* macOS Monterey 12.1 (M1チップ)

“`:検証時のディレクトリ構造の一部抜粋
src(Docker環境下で/var/www/htmlと定義)
├── vendor
│ └──bin
│        └── phpmd
├── composer.json 
├── composer.lock  
├── sample.php
└── rulesets.xml

“`

# composer経由でPHPMDを導入
※下記では、す

元記事を表示

【PHP初級①】論理演算子1 ~AかつB~

[問題]
整数値を入力させ、その値が5よりも大きく、かつ、20よりも小さければOKと表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
if($a > 5 && $a < 20){ echo 'OK'; } ``` ↓「10」と入力 # 結果 ``` OK ``` ☆論理演算子 $a == $b && $c == $d  →  $a=$bかつ$c=$d ※&&はandでも可

元記事を表示

Chapter5 マイグレーションとシーディング(5-4)

# マイグレーションとは?

元記事を表示

Chapter5 クエリビルダ(5-3)

# クエリビルダとは?

SQL文にパラメータ配列の値を組み込んで文を生成するため、
正しくSQL文ができているかわかりにくい。
渡される値によっては、予想外のSQL文が実行される危険もあります。

そこで、用意されたのが、 **「クエリビルダ」** です。
**「クエリビルダ」** は、SQLのクエリ文を生成するために用意された一連のメソッドです。

# `DB::table`とget

早速クエリビルダを使ってみます。

“`HelloController.php
public function index(Request $request) {

$items = DB::table(‘people’)->get();

return view(‘hello.index’,[‘items’ => $items]);
}
“`

“`sample.php
$変数 = DB::table(‘**テーブル名**’)->get();
“`
指定したテーブルのビルダを取得します。
ビルダは「Illuminate\database\\Query」名前空

元記事を表示

【PHP初級0⃣】割り算と掛け算

[問題]
整数値を2つ入力させ、1つめの値を2つめの値で割った結果を表示し、続けてその結果に2つめの値を掛けた結果を表示するプログラムを作成しなさい。計算はすべて整数型で行う(割り切れない場合は自動的に小数点以下が切り捨てられる)。

# コード
“`php
$a = intval(fgets(STDIN));
$m = intval(fgets(STDIN));
$i = intval($a/$m);
echo $i,PHP_EOL,$i*$m;
“`
↓ 「10
   3」と入力

# 結果
“`
3
9
“`

また、下記のようなやり方もできる。
“`php
$a = intval(fgets(STDIN));
$m = intval(fgets(STDIN));
echo $i = intval($a/$m),PHP_EOL;
echo $i*$m;
“`

↓ ご指摘を受けて

“`php
$a = intval(fgets(STDIN));
$m = intval(fgets(STDIN));
echo $i = intdiv($a,$m),PHP_EOL;

元記事を表示

bitflyer.comのAPIを使用してみました。

# bitflyer.comのAPIを使用してみました。
**※ codeはこちら
尚、postは試していません。**

https://github.com/taoka-toshiaki/Api_Bitflyer

“`php:Api_Bitflyer_Class.php

元記事を表示

Doctrineで接続しているRDBMSの名前取得

# はじめに
RDBMSの名前で条件判定が必要になり、名前取得の方法を調べたがたどり着くのに時間が掛かったため記事にしようと思いました。
使用している言語はPHP、フレームワークはSymfonyです。

# 結論
“`php
$platformName = $entityManager->getConnection()->getDatabasePlatform()->getName();
var_dump($platformName); // mysql
“`

# ちなみに
DoctrineとはSymfonyで利用されているORM(Object-Relational Mapping)です。
ORMを使用するとSQLを書かなくてもオブジェクトで直感的にデータベースを操作することができます。
Wikipediaには下記のように記載されている。

> オブジェクト関係マッピング(英: Object-relational mapping、O/RM、ORM)とは、データベースとオブジェクト指向プログラミング言語の間の非互換なデータを変換するプログラミング技法である。
>

参考:[オブジ

元記事を表示

Chapter5 DBクラスの利用(5-2)

# DBクラスとは?

Laravelに用意されている、
最もシンプルなデータベースアクセス機能は「DB」クラスです。

中でも、最もシンプルなのは、SQLのクエリを直接実行するメソッドです。

# DBクラスを使用

## コントローラの修正

“`HelloController.php
use Illuminate\Support\Facades\DB;

class HelloController extends Controller
{

public function index(Request $request) {

$items = DB::select(‘select * from people’);

return view(‘hello.index’,[‘items’ => $items]);

}

}
“`

## テンプレートの修正

“`index.php
@section(‘content’)

Name Mail