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

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

【CakePHP3】youtube動画を参考にデータベースの新規登録、編集

# 1.はじめに
今回はデータベースの基本操作であるCRUDのうち、Createにあたる新規登録、Updateにあたる更新を行います。
教材はチャンスラボ株式会社の公式YouTubeチャンネル。
https://www.youtube.com/@asterisk_cl_lab/videos

第6回~第7回の動画を参考にします。

【第6回 新規登録してみよう!】

【第7回 データ編集してみよう!】

# 2.目次
1.はじめに
2.目次
3.新規登録してみよう!
4.データ編集してみよう!
5.おわりに

# 3.【第6回 新規登録してみよう!】
CRUDのC=Createについて、新規登録を行いながら解説しています。

**1:52~2:15**
URLに記載されるコントローラー名とアクション名についての説明です。
例えば[http://localhost/users/index]というURLであれば

元記事を表示

お母さんでもわかるDockerを使ったPHPの環境構築


「Dockerfile」の作成。

下記はDockerHubからコピー。
“`
FROM php:8.1.12-apache
COPY src/ /var/www/html/
“`
ターミナルで下記を実装
`docker build -t study-php .`
`docker run -p 8080:80 -d -v “$(pwd)”/src:/var/www/html –name study_php study-php`

元記事を表示

【Laravel】外部APIで発生したエラーをそのままエラーレスポンスとして返す方法

#### 今回の実行環境

“`
# php -v
PHP 8.1.4
# php artisan -V
Laravel Framework 9.6.0
“`

## 背景
外部のAPIを実行してエラーが発生した際に、404エラーも含めすべて500エラーでレスポンスされ、ログが残ってしまう問題がありました。
そこで外部APIでエラーが発生した場合、そのままのステータスコードでエラーレスポンスを返す方法を調べてみたので紹介します。

## Laravelでのエラーレスポンス
まずLaravelでエラーレスポンスを返す方法として1番は `abort()` ヘルパーを使う方法がスタンダートだと思います。

HTTP例外
https://readouble.com/laravel/9.x/ja/errors.html#http-exceptions

ただこのabort関数、Controller内で使う分には問題ないと思うんですが、ビジネスロジック内で呼び出すのは微妙に使い勝手が悪いです。(メソッド名のニュアンス的にも処理を中断して即時レスポンスを返す的な意味合いが強いため)

今回直

元記事を表示

【Laravel】Role 認可/アクセス制限

環境
Laravel9 Jetstream
Inertia Vue3

# 認可/アクセス制限

ユーザーレベルによって、表示や操作可能な範囲を制限します。

admin 表示・操作できる
user 表示・操作できない

LaravelではGate、Policyで対応
Gate シンプル
Policy 特定のモデル・アクションを認可

※事前にrole列を追記しておく

公式

https://readouble.com/laravel/9.x/ja/authorization.html

# Role 役割振り

1 admin
5 manager
9 user

数字が少ない方が権限が強い。

# Roleの追加

“`php:database/migrations/create_users_table.php
tinyInteger(‘role’) //テーブル内に追記
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784589/d390f467-2153-7806

元記事を表示

【CakePHP3】youtube動画を参考にデータベース接続

# 1.はじめに

今回はMVCモデルの概要を確認、CakePHPとデータベースの接続を行います。
教材はチャンスラボ株式会社の公式YouTubeチャンネル。
https://www.youtube.com/@asterisk_cl_lab/videos

第4回~第5回の動画を参考にします。

【#4 controllerとViewで画面表示しよう!】

【#5 データベースを作成してCakePHPを接続しよう!】

なお、この動画を視聴する前にPHPの基本的な文法を学習しておきました。

# 2.目次
1.はじめに
2.目次
3.controllerとViewで画面表示しよう!
4.データベースを作成してCakePHPを接続しよう!
5.終わりに

# 3.【第4回 controllerとViewで画面表示しよう!】
**0:35~**
まずMVCモデルについての説明です。IT未経験の僕には馴

元記事を表示

WSL2環境にasdfでPHPとNode.jsをインストールする

– 前回「[WSL2 + VSCodeでRuboCopが動くようにしたかった](https://qiita.com/matntntn/items/883503b22f51d2d0d47b)」でasdf入れたのでPHPも入れておきました
– 備忘録として残します
– インストールしたバージョン
– PHP: 8.2.1
– Node.js: 最新版

## PHPのインストール

1. PHPインストール時にとにかくエラーが出るので先にパッケージをインストールしておく

~~~sh
sudo apt install autoconf bison libcurl4-openssl-dev libgd-dev libonig-dev libpq-dev libreadline-dev libsqlite3-dev libxml2-dev libzip-dev mlocate pkg-config re2c
# mlocateはファイルにインデックス付けるプロセスがあり、/mntを対象外にしないと非常に時間がかかる(Windows側のファイル全てにイン

元記事を表示

GitHub Flow について

# GitHub Flow とは
– チーム開発にて活用する
– バックアップを取りながら開発を進めることができる
– コピー上でコードを追記していく
– コピーを複数人でレビュー
– レビューが完了すればgithub上に反映する
### 言葉のイメージ
– mainブランチ
– 木の幹
– ブランチを作る(= コピーを作ること)
– ブランチ=枝

# 手順
1. ”リモート”mainブランチから”ローカル”mainブランチへpull
1. ブランチを作成
1. 開発 -> commit
1. ローカルブランチからリモートブランチへpush
1. Pull Request
1. マージ or 修正依頼(※再push) 
1. githubdesktop(ローカル)でmainブランチでfetchオリジンし、リモートブランチとの差分をプルオリジンすることで修正が反映される。

### 画像にて
1. ”リモート”mainブランチから”ローカル”mainブランチへpull
1. ブランチを作成
1. new branchを押し、名前を

元記事を表示

Laravel url へルパ関数の意外な落とし穴

# 環境
Laravel Version 8.68.1

# 概要
Laravelでよく使うurlへルパ関数ですが意外な落とし穴を見つけました。

“`php
url(‘/hoge/hoge’);
“`

それは「データベースにURLを登録する際にurlへルパ関数を使うと最悪の場合サイトの信頼性を損ねる可能性がある」ということです。

# どういうことか

下記の例を見てみましょう

“`HogeController.php
App\Models\HogeTable::create([
‘title’ => ‘タイトル’,
‘text’ => ‘テキスト’,
‘link’ => url(‘/hoge/1’),
]);
“`
このサービスが仮に http://example.com というドメインでこのサービスを運営していたとします。
この場合linkカラムには http://example.com/hoge/1 という値が入ります。

しかし、逆

元記事を表示

【お手軽】DockerでFuelPHPを使いたい方へ

# TL;DR
– composerを使います(composer無しの時のverだと若干辛いので)
– お手軽にFuelPHPを弄りたい方向け

# 前置き
– FuelPHPで実装されたソースコードをローカルで動かす機会があった
– DockerでFuelPHPの環境構築をした時の内容をまとめてみた

# ディレクトリ構成

`fuel-app` : アプリケーション
`docker/fuel-app` : buildや起動時に使うファイル
`compose.yaml` : アプリケーションサービスの設定ファイル

“`shell
.
├── docker/
│ └── fuel-app/
│ ├── Dockerfile
│ └── php.ini
├── fuel-app/
└── compose.yaml
“`

## Dockerfile

composerをマルチステージビルドを利用して使えるようにする

“`dockerfile:docker/fuel-app/Dockerfile
FROM php:5.6-alpine

COPY —

元記事を表示

【Wordpress】有料テーマは何回でもインポートしてOKなのか?複数サイトで使い回しして良いのか…

# 概要
* WordPressの有料テーマを使っていて、別のサイトでも同じ有料テーマを使いまわして良いのかと思ってふと調べてみました。

## 結論
* 利用する有料テーマの「利用規約」を読むのが一番です。
* 一般的にWordPressテーマには、GPL(General Public License)というライセンス形態が多く採用されているようです。
* GPLとは?
* 「General Public License」の略で、ソフトウェアに対してのオープンソースライセンスの1つです。GPLライセンスは、ソフトウェアの複製、改変、配布を自由に行うことができるように規定しています。自由ソフトウェアのライセンスの1つで、自由に使い、研究し、配布し、修正することを認めています。
* もし購入したテーマがGPLライセンスの下でリリースされたソフトウェアであれば、何回インストールしても問題ないということになります。
* ただし、それ以外のライセンス形態を採用しているテーマもありますので、ライセンスについては有料テーマのページや利用規約で確認する必要があります。

## 自分が使ってい

元記事を表示

【初心者向け】Wordpressでページによってヘッダーの画像を変える

# はじめに
複数のページで構成されているWordpressサイトで、固定ページやカスタム投稿、カテゴリーやタームの大枠のデザインは一緒だけど「ヘッダーの画像を変える」ことで、閲覧者へ違うページであることをぱっと見で伝えられるというメリットがあります。
テーマファイルの数は出来るだけ少なめに、コードもできるだけシンプルに、でも閲覧者が混乱してしまうようなデザインにならない様にします。

`PHP`ではそれぞれ条件分岐を書きますが、実際に画像をページの種類によって変えるのは、`CSS`で行っていますので簡単に実装が可能です。

# 完成イメージ
完成イメージは以下の画像です。
背景に画像があり、その上にタイトルが表示されているという形です。
画像は、固定ページ、カスタム投稿、カテゴリー、ターム等で変えます。
![header.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3004345/9eb11f4d-37bb-c962-dc34-31a7c40c3c2c.jpeg)

# コード
とりあえずコードだけ

元記事を表示

早い!簡単!1分でCloud Runを使ってphpMyAdmin環境構築!【Cloud SQL】

# TL;DR

“`bash
gcloud run deploy phpmyadmin \
–image phpmyadmin \
–region asia-northeast1 \
–allow-unauthenticated \
–port 80 \
–set-env-vars=PMA_ARBITRARY=1
“`

Cloud SQL Proxyを使用する場合

“`bash
gcloud run deploy phpmyadmin \
–image phpmyadmin \
–region asia-northeast1 \
–allow-unauthenticated \
–port 80 \
–add-cloudsql-instances $DEVSHELL_PROJECT_ID:asia-northeast1:mysql \
–set-env-vars=PMA_SOCKET=/cloudsql/$DEVSHELL_PROJECT_ID

元記事を表示

【PHP】強連結成分分解のライブラリ

## はじめに

強連結成分分解のライブラリをPHPで実装しました。機能と実装方法については [AtCoder Library (ACL)](https://atcoder.jp/posts/517) の “scc_graph“ とほとんど同じになっています。強連結成分分解については下記の記事がとてもわかりやすかったです。

https://qiita.com/AkariLuminous/items/a2c789cebdd098dcb503

## 実装

“`PHP:Scc_Graph.php
n = $n;
$this->edges = [];
}

元記事を表示

PHP/LaravelでJSONパーサーAPIを作ってみる。

# はじめに

[naritomo](https://twitter.com/naritomo08)と申します。

本職はインフラエンジニアを行っています。
これまでアプリ領域の技術習得のため、各種言語の開発環境Dockerの構築を行ってきましたが、laravelでのアプリ第一号を作ってみましたので、公開したいと思います。

いろいろアドバイスいただけると嬉しいです。

## 開発概要

以下の仕様とします。

* API稼働フレームワークはPHP/Laravelを使用する。
* API入力は、以下のものを入力する。
– URLにクエリでJSONキーを指定する。(?key=key1)
– POSTボディーにJSONデータを入れる。
* API出力は以下のものとする。
– クエリで指定したJSONキーに対応した値をプレーンテキストで出力する。

## 事前準備

以下の記事を参考にPHP/Laravel開発環境を構築してること。
Laravelサイトを参照できること。
プロジェクトフォルダ(backend)に移動する。

https://qiita.com/naritomo0

元記事を表示

PHPパッケージにバグ発見時の対処

# PHPパッケージにバグ見つけちゃいました…

composerでインストール可能なPHPパッケージを使用していて、
どうも期待通りに動かない箇所がありました。

バグ発見、応急処置、最終的にパッケージ更新までの流れをまとめてみました。

## 期待通りに動かない??
cakephp-swagger-bake
というCakePHPとswaggerの橋渡しするようなパッケージを使用して、
高速にREST API開発&テスト環境(Swagger UI)構築を進めてました。

シンプルなAPIについては、あまり調整はいらないのですが、
複雑なリレーションなどを含むAPIの場合、アノテーションを使って微調整する必要があります。

今回はそのアノテーション処理周りで、OpenAPI仕様からずれた出力がされるケースがあり、
Swagger UI 上で、テストをしようとするとResponsesのExample values が期待通りに
出力されなかったです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws

元記事を表示

【WordPress】文章(コンテンツ)中のURLを自動的にリンク(aタグ)にしよう!

# TL;DR
“` php
//$strの中のhtmlタグに設定されていないURLをリンク化する関数
function convert_string_url_to_link($str){
$ptn = ‘/([^”])(https?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])([^”])/imu’;
$rep = ‘$1$2$3′;
$result = preg_replace($ptn, $rep, $str, -1);
if($result == null) return $str;
return $result;
}
//上記関数をthe_contenのfilterに設定
add_filter(‘the_content’, ‘convert_string_url_to_link’);
“`
特にエラー処理とかはしてないので、必要に応じて編集してください。

# この記事を書いた理由
クライアントさん

元記事を表示

Carbon使用時に必ず注意すること【Laravel】

CarbonオブジェクトはMutable(変更可能)という特性を持っています。
Mutableは便利である反面、注意しなければならない点もあるため、自分用のメモも兼ねて記事を書かせて頂きます。

## Carbonとは?
日付と時刻を簡単に操作できるライブラリです。DateTimeクラスを拡張しており色々と便利なメソッドが利用できます。

## Mutableとは?
Mutableとは、オブジェクトの状態が変更可能であるということです。
例えば以下コードのように`$data1`に対して2023年4月1日という日付のcarbonインスタンスを代入し、
addDaysメソッドを使って、そこから7日後の日付(4月8日)を`$data2`に代入したとします。
“`php
$date1 = Carbon::createFromDate(2023, 4, 1);
$date2 = $date1->addDays(7);
“`
この状態で、diffInDaysメソッドを使って`$date1`と`$date2`の差が何日なのかを確認してみます。
当然7日になるだろうと思いますが、、
“`ph

元記事を表示

PHP ヒアドキュメント

## はじめに
業務でヒアドキュメントを使うことがあったのでその際に調べたことを簡単にまとめます。

## 環境
PHP 8.1.7

## ヒアドキュメント
ヒアドキュメントはPHPで文字列を扱う方法のうちの1つです。
「’」や「”」で囲って文字列を扱うことが多いですが、ヒアドキュメントという形式で文字列を扱うこともできます。

**ヒアドキュメントでは「<<<」のあとに任意のIDを指定し、文字列を置いた後でさらに「<<<」のあとに指定したID(終端ID)を置いて閉じることで文字列を定義します。** ```php echo <<

元記事を表示

Bootstrap5 カルーセル×WPカスタム投稿

……………..
wordpress 6.2
Bootstrap5
Win10
……………..

Bootstrapのサムネイルつきカルーセルをつくりたい

公式ドキュメントにサムネイルつきカルーセルのサンプルがないので、Codepenで見つけたありがたいサンプルをカスタマイズする。

>Bootstrap5 Carousel Examples
>https://codepen.io/Shylmysten/pen/rNdbZqX

まずはこれを実装先にページに合うよう整形、フェードインもさせるようにしたい。

Laravel+Livewireで簡易タイピングゲームを作ってみる

# はじめに
Laravelで開発する際に、非同期処理の部分で困ることが多々あるので(JavaScriptの知識は基礎構文程度)、Livewireの練習がてら超簡易的なタイピングゲームをつくってみる。
プログラミング歴も乏しく、Livewireも初めての試みのため、ひとまず動けばいいや、、、というモチベーション。

動作環境
– macOS Ventura 13.2.1
– php v8.2.4
– laravel v9.19
– livewire v2.12

# 準備
Laravelのインストール
“`zsh
% composer create-project laravel/laravel:^9.0 [app name]
“`
Livewireのインストール
“`zsh
% composer require livewire/livewire
“`
composer.jsonが以下のようになればOK。
![Screenshot 2023-04-02 at 18.50.51.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

OTHERカテゴリの最新記事