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

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

Laravel 認可について

# はじめに
Laravelで認可について学習しましたので そのアプトプットです。

# 認可って?

公式(https://readouble.com/laravel/9.x/ja/authorization.html)

> あるユーザーが認証されていても、アプリケーションが管理している特定のEloquentモデルまたはデータベースレコードを更新や削除する権限を持っていない場合があるでしょう。Laravelの認可機能は、こうしたタイプの認可チェックを管理するための簡単で組織化された方法を提供します。
>

CRUD処理で自分が投稿・編集・削除など基本的に自由に操作できますが、他人が自分の投稿を勝手に削除されたりするとまずい。防ぐための方法として「ゲート」と「ポリシー」の2つが存在し、アプリケーションを構築する時は両方混在する事もあるそう。とりあえず今回はポリシーに絞ってアウトプットしていきたいと思います。

### ゲート
ダッシュボードの表示など、モデルやリソースに関連しないアクションに適しています。 
### ポリシー 
特定のモデルやリソースアクションを認可する場合に適して

元記事を表示

LaravelとmicroCMSでのコンテンツ管理 応用編

PHPフレームワークであるLaravelと、ヘッドレスCMSであるmicroCMSで、コンテンツ管理機能を実装する手法をご紹介します。Laravelの実装とmicroCMSのコンテンツ管理2つに関してハンズオン形式で記述していきます。

## 前回の記事はこちら

https://qiita.com/masakichi_eng/items/6ceda3b4d7f82ec22aa5

この記事では、応用編として記事詳細ページの表示と、記事にタグを設定する方法について解説していきます。

## 記事詳細ページの実装

### ルーティングの追加

“`php:routes/web.php
Route::get(‘/articles/{id}’, [ArticleController::class, ‘show’])->name(‘articles.show’);
“`

### microCMSのサービスクラスに追記

“`php:app/Services/MicroCmsService.php
public function getSingleContent(string

元記事を表示

ポケモンのクラスを作ってPHPオブジェクト指向の3大要素を理解する

## はじめに
こんにちは。masakichiです。

PHPのオブジェクト指向には3大要素というものがあります。
「カプセル化」「継承」「ポリモーフィズム」の3つだそうです。

知らない人からすると、なんのこっちゃだと思います。
これらを理解するには、PHPのクラスから学んでいくといいと考えています。

ということで、まずはPHPのクラスについて理解するために、ポケモンを通して実装例を書いていこうと思います。

ポケモンには様々な種類がいます。
一番最初は151匹だったのに、いまでは900種類以上いるそうです。

とても覚えられたものじゃありません。

さて、いきなりですが、ここであなたはポケモンの開発者になったとします。

900種類以上のポケモンを表現するために、プログラミングコードを記述しなくてはいけません。
そんな時、1匹ずつ別々のプログラミングコードを記述することで実現は可能かもしれません。

しかし、そのやり方だと、もしまた新しいポケモンが発売された時、同じように新種のポケモンの数だけコードを書き足さなくてはいけなくなります。

そんな時に役立つのがクラスという考え方です

元記事を表示

AWS: 簡単なLAMPサーバーでWordPressを動かすまで(Intel Mac) 〜PHPをインストール〜

# はじめに
AWSハンズオンの学習記録です。
2022年8月の情報をもとに投稿します。

ゴールは、EC2を使って簡易的な仮想サーバーを作り、ブログソフトであるWordPressをインストールします。
また、WordPressを外部公開できることを想定しています。

**今回はプログラミング言語である「PHP」のインストール方法を投稿します。**

尚、ハンズオンがメインのため、各サービスの概要や用語の解説は極力省かせていただきます。
### ゴール
仮想サーバーでWordPressを使える状態にします

### ゴールまでの流れ

[1.VPCとサブネットを作成](https://qiita.com/holySh10/items/749b98e320fc71e6739e)
[2.EC2を作成/セキュリティグループの設定](https://qiita.com/holySh10/items/90a3501d819f1ae2c7cd)
[3.EC2へSSH接続](https://qiita.com/holySh10/items/689f4c83cd18db128983)
[4.Webサー

元記事を表示

Docker環境でPHPでGDライブラリを有効にする方法

# ハマったこと

php:8.0-apache-bullseye環境で開発中、GDに依存しているライブラリをcomposer requireした際、Dockerの立ち上げ時に以下のエラーが出るようになった

“`
#0 0.140 + composer update
#0 0.216 Loading composer repositories with package information
#0 1.609 Info from https://repo.packagist.org: #StandWithUkraine
#0 6.428 Updating dependencies
#0 7.318 Your requirements could not be resolved to an installable set of packages.
#0 7.318
#0 7.318 Problem 1
#0 7.318 – maatwebsite/excel[3.1.28, …, 3.1.30] require phpoffice/phpspreadsheet 1.

元記事を表示

ubuntuにcomposerをインストール

参考
https://mebee.info/2020/06/02/post-10844/

“`
sudo apt install -y php libapache2-mod-php php-gd php-xml php-cli php-mbstring php-soap php-xmlrpc php-zip
“`

“`
curl -sS https://getcomposer.org/installer | php
“`

“`
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
source ~/.bashrc
“`
確認
“`
composer -v
“`

元記事を表示

はじめてORM(Eloquent, Doctrine)を使うことになったPHPerのための手引き

## はじめに

この記事ではORM(=Object Relational Mapper)を使うメリットやORMとはみたいな小難しい話はしません。フラットなPHPを書いていたPHPerがORMを使う世界に初めて来た場合、そもそもORMの1レコード=1オブジェクトという世界観に対してなかなかイメージがつかめないことがあるのを観測したので、そこのイメージギャップを埋められればと思って書いてみました。

そもそもクラス?オブジェクト?インスタンス?プロパティ?メソッド?みたいな用語面で躓いている場合は https://www.php.net/manual/ja/language.oop5.php 辺りを別タブで開いて行ったり来たりしながら読んでもらうと良いかもしれません。

## データの読み取り

### 従来の考え方

![データベース](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23963/bccd50a9-8992-3d9f-baee-98c7af738ca0.png)

上の図のようなデータベースの表

元記事を表示

LaravelでHttpRequestを扱う際の個人的ベストプラクティス

[最終的な成果物](#最終成果物)

# 基本的な考え方と、問題点
LarvelにてRequestを扱う際、少しググった場合も、書籍等の場合も大体FormRequestを継承すると便利だよー。
といった旨の解説とともに、Sampleでコードを載せてくれています。
そのSampleはとてもSimpleで確かにこれは簡単だ!と思わせてくれる内容であるので大抵はそのSampleに習い実装をしていくことかと思います。

しかし、時と場合によっては複雑なHttpRequestを扱わなければいけなかったり、とても大量のパラメータを扱わなければいけなかったりします。
そのような状態に陥ったときに、

FormRequestを継承して使う。

だけでは少々苦しい場面に遭遇することがあります。
苦しいとはいっても

– RequestクラスがFatになる
– バリデーションの記述が少し難解になる

くらいではあるのですが。
また、これはそもそもですがLaravelのFormRequestは

– どのようなパラメータを受け付けるかについての見通しがよくない

とも思ってます。

そのうえ

元記事を表示

PHP MAMPで環境構築 

PHPの環境構築をMAMPで行います。

環境{
Mac
MAMP
VScode
}

備忘録
## MAMPとは
Webアプリの開発に必要な環境をまとめたソフトウェア。
MAMPをインストールするだけでPHPの実行環境が整う。

従来、Mac向けに開発されたソフトウェアであり、Macユーザー向け。
(現在はWindows版も提供あり)

Macintosh(マッキントッシュ):従来、Mac向けに開発されたため
Apache(アパッチ):Webサーバー
MySQL(マイエスキューエル):データベース
PHP:PHPで書かれたプログラムを実行するソフトウェア

## インストール
まず、公式からインストールします。
[MAMP公式](https://www.mamp.info/en/mac/)

“`terminal
1,Free Download をクリック

2、intel か M1(2) のいずれかを選択しダウンロードを開始

3、ダウンロード終了したら、インストーラーを実行し、ホップアップで「続ける」を選択

4、更に警告ホップアップ。移動したり名前を変更したりするな。とのこと

元記事を表示

最小限のSSR付きSPAフレームワークを作ってみた

# 概要

PHPのテンプレートライブラリでいろいろ考えていた時にふとこうすればSSRっぽいことができるんじゃないかと思ったので試しに作ってみた記録。
どうせ需要なんてないのはわかりきってるので適当。

https://github.com/uniras/microssr

# PHPコードとテンプレートの両立

別記事で書きましたが、意外と簡単に1ファイルでPHPコードとテンプレートの両立が出来たので、これもっとPHP側でごにょごにょすればSSRっぽくなるんじゃね?って気づきました。

# Mustacheの採用

テンプレートエンジンはMustacheを採用した、なぜかというと探した限り公式でPHPにもJavaScriptにも対応したテンプレートエンジンはこれくらいだった。
また、PHPも(composerとかで)インストールしなくてもファイルをフォルダごとアップロードするだけで使えるようになるのも決め手になった。

# サーバーサイド部分

こんな感じのコンテンツファイルを作る。

“`php

元記事を表示

テンプレート(smarty, mustache)をPHPファイルに適用する

# 概要

PHPファイル自身をsmartyやmustache等のテンプレートエンジンのテンプレートとして適用できるのかという思考実験をしてみたら簡単にできたので公開してみる。

# 何がうれしいの?

テンプレートエンジンを実行してテンプレートを展開するコードをテンプレートに埋め込めれば、
PHPファイル1つ(テンプレートエンジン本体のソースコードを除く)でテンプレートの実行結果が確認できてテンプレートの製作がはかどりそうと思った。

# やり方

PHPファイル本体は`file_get_contents(__FILE__)`で取得できるので、PHP部分``を正規表現で取り除いてからテンプレートエンジンに渡すだけ。

# なぜsmartyとmustache?

どちらも最悪ZIP解凍したファイル群をフォルダごとアップロードするだけでテンプレートエンジンの実行ができるから。
だいたいのテンプレートエンジンはそうなのかもしれないけど。要はたまたま目についただけ。
一応mustacheは他の言語というかJavaScriptにも公式対応しているので夢が広がりそうと思った部分もあ

元記事を表示

Bit演算子について

うす、豚野郎です。
最近、このQiitaの存在を会社の人にバラしたら
「おっす!豚野郎です!」といじられました。

さて、今回はBit演算子について書いていこうと思います。
プログラムでも2進数が使えることを初めて知りました。

公式ドキュメントに沿って書いていこうと思います。
https://www.php.net/manual/ja/language.operators.bitwise.php

・バージョン:PHP 7.4.29

順番的に以下の順番で書いていきます。
1.ビット積
2.ビット和
3.排他的論理和
4.否定
5.左シフト
6.右シフト

## 1. ビット積
> $a および $b の両方にセットされているビットがセットされます

ここでは3と5を例に書いていきます。
10は二進数だと1010、15は二進数だと1111です。

この場合、ビット積は1010になるので、結果は10になるはずなので検証します。
“`bit.php

“`

結果
“`
1

元記事を表示

laravel テストアサーション 論理削除されているか確認する(要点のみ)

# 概要

– DB系テストアサーションで論理削除されていることを確認するアサーションとその使い方を要点のみまとめる。

# 方法1 – モデルを使う

– `assertSoftDeleted()`の引数に論理削除されたことを期待するモデルを渡すことでチェック可能である。

“`php
$this->assertSoftDeleted($fooModel);
“`

# 方法2 – テーブル名と一意の値を使う

– `assertSoftDeleted()`の引数にテーブル名とレコード絞り込みデータを渡すことでチェック可能である。

“`php
$this->assertSoftDeleted(
table: ‘テーブル名’,
data: [
‘id’ => 1,
],
);
“`

# 参考文献

– [https://readouble.com/laravel/9.x/ja/database-testing.html#assert-delete

元記事を表示

laravel ルートnameを使ってパスを取得する方法

# 概要

– laravelの`route()`とPHPの`parse_url()`を用いてルートnameからパスを取得する方法をまとめる。
– 自分なりの方法です。もっといい方法あったらコメントいただけますと幸いです。。!

# 方法

– 下記のように記載する。

“`php
$path = parse_url(route(‘ルートname’), PHP_URL_PATH);
“`

元記事を表示

【BladeOne】インストールと基本的な使い方

# はじめに
BladeOneを使用して実装する機会がありまとめることにしました。
QiitaではBladeOneの記事がほぼないため参考になればと思います。

# BladeOneとは
BaldeOneとは、LaravelのBladeを単一のPHPで使用できるようにしたものです。
ただし、LaravelのBladeとBladeOneは違うものなので注意が必要です。
※詳細は「[Differences between Blade and BladeOne](https://github.com/EFTEC/BladeOne/wiki/Differences-between-Blade-and-BladeOne)」を参照して下さい。

# ライセンス
ライセンスは「[License](https://github.com/EFTEC/BladeOne#license)」を参照して下さい。

# インストール
インストール方法は2パターンです。
– composerを使用してインストール(今回はこちらを使用)
– `composer require eftec/bladeone`

元記事を表示

WordPress投稿ページの検討

## クライアントのためにシンプルな投稿ページを

クライアントにとって使いやすい投稿ページを作成しようと検討しました。
ブロックエディタでのテンプレート機能やAdvanced Custom Fieldsの機能などを使ってみましたが、
結果としてCPT UI x Smart Custom Fieldsに落ち着きました。

ガリガリ言語ページではなく、プラグインをうまく使っていい感じにページを作成したい思いで綴ってます。

手抜きすぎだろ!と突っ込みたい気持ちを抑えて読んでいただけるとありがたいです。

クライアントは、wordpress触りたいけど知識は全くないので、
迷わず投稿できるか、、という部分で

今回、事例ページとコラムページを作りたいということで

### CPT UIを利用して専用メニューの作成

https://hirashimatakumi.com/blog/5271.html

事例ページとコラムページの構成としては、

見出し
画像
テキスト

とシンプルなループで処理したい。
というわけで、

https://ja.wordpress.org/plugi

元記事を表示

【PHP学習メモ】HTTPリクエストメソッド

# HTTPリクエストメソッドの使い方
※本記事はPHP学習の備忘録目的です。筆者は初学者ゆえ、誤りなどございましたらご指摘いただけますと幸いです。

**HTTPリクエストメソッドとは**
ブラウザ(クライアント)からWebサーバに対してしてほしいことを依頼するための手段
HTTPメソッドには「GET,POST,PUT,DELETE」などがある

どのHTTPメソッドが使われているかはデベロッパーツールの「Network」パネルから確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/f761729c-f0b0-43b5-e68a-45535ed5bba7.png)

## 各メソッドの使い方
**1.GETメソッド**
データを取得するときに使用されるメソッド
WebブラウザにURLを入力してページを表示するときには常に「GET」メソッドが使用される。
条件を指定して検索する場合にはURLパラメータとして条件を指定する
https://example.co

元記事を表示

laravel/jetstream[v2.10.0, …, v2.10.1] require illuminate/support ^9.0 と返ってくるエラーの解消方法

## はじめに
Laravel(v9.2.1)で開発を進めていったところ、Viteの影響に対応できず
バージョンを落とし(v8.7.5)、Jetstreamをインストールしようとコマンドを
実行したところで、タイトルのエラーが発生。

## 起きた事象の詳細
Jetstreamをインスールするためのコマンドを実行。
“`
composer require laravel/jetstream
“`
すると、以下のエラーが返ってくる。
![20220806-231443.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/aa3b21e6-5266-71bc-ea1d-9bc8b2844d17.png)
出力されているエラーによると、現在リリースされているJetstreamの
バージョン(2.1.0)はLaravelのバージョン9.0以上でサポートされているようです。

## 解決方法
Jetstreamのバージョン2.1以下に指定し、コマンドを実行する事で解決。
“`
composer r

元記事を表示

【PHP】static・const・defineの挙動の違いと、呼び出し方$this・self::の意味

変数や定数を定義するときに使うstatic、const、defineについて、挙動を試してみたのでメモ。

またstatic、const、defineそれぞれの特徴と、$this、self::の呼び出し方の意味についてまとめる。

## それぞれの特徴
### staicとは

> クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。
>

[PHP: static キーワード – Manual](https://www.php.net/manual/ja/language.oop5.static.php)

staticが付いていない通常のメンバ変数は、生成したインスタンス毎に管理される。

一方staticが付いていると、インスタンスに関係なくメンバ変数の実体は1つのみとなる。

### constとは

> 値が変更できない [定数](https://www.php.net/manual/ja/language.constants.php)をクラス内に定義することができます。 クラス定数のデフォ

元記事を表示

レンタルサーバーを借りてオンラインゲームのWikiサイトを作ってみる #1

前の記事
https://qiita.com/Unirenkon/items/7ed5bcc724205906083c

# 今回の作業

* レンタルサーバーを借りる
* 独自ドメインを取得する
* Pukiwikiをサーバーにインストール

今回は本記事(シリーズ)を書こうと思った前日にやった作業なので、SSなどを用意できなかった部分があります。

## レンタルサーバーを借りる
自前でサーバーを借りてWikiを作る場合、**Xserver**というサーバーを利用すると、**Pukiwiki**というOSSが簡単にインストールできることがわかったので、まずはXserverと契約しました。

キャンペーンをやっていて、ちょうど10日間無料をやっていたのもやるか〜と思ったきっかけです。
今のキャンペーンは2022年8月25日(木)18:00までで、さらに独自ドメイン無料、利用料金キャッシュバックもやっているとのこと※条件あり
(ただキャンペーン自体は形を変え割といつでもやっているものだろうなとも思いますw)

10日間無料の体験はクレジットカードを登録しなくてよかったので気楽に試せる

元記事を表示

OTHERカテゴリの最新記事