PHP関連のことを調べてみた

PHP関連のことを調べてみた

【Laravel】【PHP】トレイト(Trait)を活用して実装を再利用する

# はじめに

今回はPHPに実装されている
 **トレイト(Trait)**
と呼ばれる仕組みについて記載してみました。

# トレイト(Trait)とは

以下、PHP公式ドキュメントでの説明が下記となります

> PHP は、コードを再利用するための「トレイト」という仕組みを実装しています。
>
> トレイトは、PHP のような単一継承言語でコードを再利用するための仕組みのひとつです。 トレイトは、単一継承の制約を減らすために作られたもので、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにします。 トレイトとクラスを組み合わせた構文は複雑さを軽減させてくれ、 多重継承や Mixin に関連するありがちな問題を回避することもできます。
>
> トレイトはクラスと似ていますが、トレイトは単にいくつかの機能をまとめるためだけのものです。 トレイト自身のインスタンスを作成することはできません。 昔ながらの継承に機能を加えて、振る舞いを水平方向で構成できるようになります。 つまり、継承しなくてもクラスのメンバーに追加できるようになります。

https

元記事を表示

Windows11でLaravelの環境構築してみた()

## 導入
こんにちは、こんばんは、おやすみなさい、**Twil3akine**です。

今回、純粋なWindows (=Dockerとかを使わず) にLaravel環境を構築(超助けてもらいながら)したので、備忘録と誰かの助けになればいいなと思い、残しておきます。

1. **php** の インストール
2. **Laravel** の インストール

という感じで行こうと思います。

## 1. php の インストール
1. phpのインストール

https://windows.php.net/download#php-8.3 に飛んでもらい、スレッドセーフの方で自身のバージョンにあうもの (= x64 or x86) を選んでダウンロードし、そのままダウンロードしたものを解凍してほしいのですが、個人的なおすすめは `C:\php` というディレクトリを新しく作ってそこに解凍するのをおすすめします。

2. PATH通し

PCの検索欄からコントロールパネル ->
コントロールパネルの右上の検索欄に「環境変数」で出てくる「システム環境変数の

元記事を表示

Laravel忘備録-カラムの文字数を変更するマイグレーション-

カラムの文字数を変更するマイグレーションファイルを作成する機会があったため忘備録として記録に残そうと思います。

# 想定するデータ

usersテーブル

“`
+—————+———————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————+———————+——+—–+———+—————-+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| created_at |

元記事を表示

インクリメンタルサーチを実装してみた。

# はじめに
インクリメンタルサーチは、ユーザーが検索ボックスに入力するたび、検索結果がリアルタイムで更新される機能です。これにより、ユーザーは検索結果を即座に確認できるため、よりスムーズな検索体験を提供できます。本記事では、LaravelとjQueryを使用してインクリメンタルサーチを実装する方法を紹介します。

### 1. データベースの設定
まず、検索対象となるデータベーステーブルを準備します。今回は、usersテーブルを例に、ユーザー名やメールアドレスを検索対象とします。

### 2. ルートの設定
検索リクエストを処理するために、routes/web.phpにルートを追加します。

“`php
use App\Http\Controllers\UserController;

Route::get(‘/search’, [UserController::class, ‘search’])->name(‘user.search’);
“`
このルートは、検索処理を行うコントローラーにリクエストを転送します。

### 3. コントローラーの設定
次に、検索処理を行うコン

元記事を表示

多次元配列(多次元連想配列)をJSONに変換した際に想定外の変換がされる

## 事象
Ajax経由でテーブルから取得した多次元連想配列を`JSON`に変換したが、想定外の形式になってしまった。

## 変換する配列
`default_flg`の設定値を基準に、グループ化してから変換したい。
“`
Array
(
[0] => Array
(
[id_name] => aaa
[content] => aaaaaaaaaaaaaa
[default_flg] => 0
)

[1] => Array
(
[id_name] => bbb
[content] => bbbbbbbbbbbb
[default_flg] => 1
)

[2] => Array
(
[id_name] => ccc
[content] => cccccccccccccc

元記事を表示

142日目 PHP特有の記号まとめ 社畜♀

最近初めてPHPに触れる機会があり、見たことはあるけどどういう意味なんだろうと感じていたPHP特有の記号をまとめておきたいと思います。

PHP特有の記号を理解できたらPHPへの理解度も上がり、コードも読みやすくなると思います。

## 第2話《PHP初心者が学ぶPHP特有の記号》

### **`$`(変数)**

・**用途**:PHPでは、すべての変数が`$`記号で始まります。変数はデータを格納するために使用されます。

“`php:例:
$name = “John”; // 文字列型の変数
$age = 30; // 整数型の変数
“`

### **`::` (スコープ解決演算子)**

・**用途**:クラスの静的メソッドやプロパティ、定数にアクセスするために使用します。また、親クラスの静的メンバーにアクセスする際にも使われます。

“`php:例1:静的メソッドにアクセス
class Math {
public static function add($a, $b) {
return $a + $b;
}
}

e

元記事を表示

僕なりの Laravel のTips

# プロジェクト作成

sailで作成する(最新バージョンで作成される)

“`bash
curl -s https://laravel.build/プロジェクト名 | bash
“`

composerで作成する(バージョン指定するならこっち)

“`bash
composer create-project laravel/laravel プロジェクト名 –prefer-dist “^10.0”
cd プロジェクト名
composer require laravel/sail –dev
php artisan sail:install
sail up -d
“`

> バージョン9とBreezeは一緒に使わない。レイアウトがバグる。

以下のようなエラーが出る時があるが、composerのバージョンを最新にしてあげると解決する場合が多い

“`bash
The “https://repo.packagist.org/p2/carbonphp/carbon-doctrine-types~dev.json” file could not be downloaded: F

元記事を表示

WordPressをMVCモデルで構築する

## 動機
WordPressの特性上、ビルドイン関数で簡単に操作できるとはいえ、一つのファイルに全て詰め込んでしまうのもいかがなものかと感じたのがきっかけです。

テンプレートファイルを触っている時に、いつの間にか機能改善や追加などで膨れ上がっていることがあります。修正するのも一苦労で、どこにどういった処理が書かれているのかわからなくなることもあります。

そのようなことにならないよう、責務をしっかり分けたディレクトリ構成にしたいのが目標です。

## なぜMVCモデルなのか
アーキテクチャとして理解しやすかったからです。
それぞれ役割を分けファイル分割することでコードの見通しと責任が明確になります。

:::note
Viewについては、WordPressテンプレートファイルとみなします
:::

– **Model**
DB操作、ビジネスロジックを担う
– **Controller**
Viewへのデータ引き渡し、Modelへのデータ処理指示を担う
– **View**
ユーザーインターフェイス側(表示させる画面)を担う

## ディレクトリ構成
Viewについては各テンプレート

元記事を表示

PHPリフレクションを用いた動的メソッド呼び出し

# はじめに
業務でリフレクションを用いることがあったので、備忘録としてリフレクションの実装例を紹介する記事です。
PHPではリフレクションというものを利用することで、クラスのメソッドやプロパティに動的にアクセスすることが可能です。クラスやメソッドを動的に操作でき、状況に応じて異なるメソッドを呼び出したい場合に非常に役立ちます。

# リフレクションとは?
リフレクションは、クラスやメソッド、プロパティについてのメタ情報(プログラムの構造、特性、および挙動)を取得し、それを操作するPHPの機能です。PHPでは ReflectionClass や ReflectionMethod を使って、実行時に動的にクラスやメソッドを操作できます。

# 実装をしてみる
早速実装していきます。
本記事では、サービスとリポジトリを分割し、リフレクションを用いた動的メソッド呼び出しを実装する例を紹介します。

まず、リポジトリクラスで具体的なメソッドを定義し、それをサービスクラスからリフレクションで呼び出す設計を実装してみます。

#### リポジトリクラス
“`php

元記事を表示

【PHP】VS Codeで関数の一覧を表示させておく

## やりたいこと
関数が多くて探したい関数がすぐに見つからない!

phpの関数の一覧をVS Codeの左側に出しておいて
クリックしたらその関数に飛ぶようにしましょう。

## 拡張機能「PHP Intelephense」をインストール

[PHP Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client
) をインストール

![スクリーンショット 2024-08-29 122106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3686263/97a3c049-aa16-7005-3f18-c131d98c5cd0.png)

## VS Codeの設定を調整

VS Codeの設定画面で「outline」と検索。
以下の画像でチェックが付いているもの以外はチェックを外す。

このチェックを外さないといらないデータが一覧に混ざってきます。

![ima

元記事を表示

Laravel 学習 (バリデーション)

## バリデーション

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/52b612e9-0a99-df61-54bb-67c43fa2b8f3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/f6fc3ac1-56ee-5a8e-fa9f-b3d9c9fd435e.png)

送信ボタンを押した際にバリデーションチェックをし、問題があればエラーメッセージを表示させます。

“` php:\routes\web.php
Route::get(‘/hello’,’App\Http\Controllers\HelloController@index’);

Route::post(‘/hello’,’App\Http\Controllers\HelloController@post’);
“`

“` php:\app\Http\Controllers

元記事を表示

更新のお知らせ: ServBay 1.4.2、新機能と改善点!

ServBayバージョン1.4.2のリリースをお知らせします!
一歩先を行く体験をしたいですか?私たちの[Discordコミュニティ](https://talk.servbay.com)に参加してください。

## 新機能
**グローバル検索**: ホストとドメインの検索をサポートするグローバル検索機能を追加し、ユーザーの効率を向上させ、必要なリソースを迅速に見つけることができます。
**PHP設定UI**: 直感的なPHP言語設定インターフェースを提供し、開発者が言語設定を簡単に行えるようにし、設定時間を短縮します。

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vi0rclkqdvsvvw6wf1xz.png)

## 製品の改善
**ナビゲーションメニューの再設計**: ナビゲーションメニューを完全に再設計し、レイアウトを最適化して全体的なユーザー体験を向上させ、機能へのアクセスをより便利にしました。
**ホストページの最適化**: ホスト管理ページを部分的に再構築し、

元記事を表示

データの受け渡し練習のためECサイト作ってみた

## 記事の概要
エンジニア未経験からの挑戦ということで企業様へアピールするためのポートフォリオを作成してみました。
作成手順と機能、工夫したところ、課題点を書き出してみようと思います。

### プロフィール
20代後半 男性
ITは全くの未経験(前職は営業)
就労移行支援にて0からプログラミングを学ぶ。
**作成期間は1ヶ月くらい**

## 目的
* JavascriptとPHPを使いつつDBとの連携も行えるよう経験を積む
* 今の自分のレベル感を企業に見ていただく
* 素のJs、PHPでどこまで書けるかチャレンジ

# スペック
**言語**
Javascript (Vanilla Js)
PHP 8.0.19

**DBMS**
MySQL Ver 8.0.29

**開発環境**
Windows 11 Pro
IIS (Version 10.0.22621.2860)

## 完成画面
(圧縮上手くできませんでした。。。)
![ECサイト.gif](https://qiita-image-store.s3.ap-north

元記事を表示

Laravelでオニオンアーキテクチャを使ってみた

## はじめに
少しだけクリーンアーキテクチャやオニオンアーキテクチャについて感覚が掴めた気がするので記事にしておきます。
ご指摘点あれば遠慮なくお願いいたします。
構成ですがPHPとLaravelを使用、ディレクトリ構成はonion architectureで構築していきます。

### 実際の構成
以下ディレクトリ構成になります。
また色んなディレクトリ構成が存在するのでこれが正解ではないです。
呼び出し方とかおさえておけば色々対応できると思います。

“`
├── app
│ ├── Http
│ │ ├──Controllers
│ │ │ ├── Api
├── onion
│ ├── Controller
│ ├── Driver
│ ├── Entity
│ └── UseCase
“`

流れとしては
– routes/api.php
– Http/Controllers
– onion/Controllers
– onion/UseCase
– onion/Driver(Repository)
– onion/Entity

元記事を表示

robots.txtを取得しクロール拒否されていないかチェック②

# 概要

前回は、[robots.txtを取得する処理](https://qiita.com/ishi720/items/d985bb711744ce9864fb)を作成しました。
今回は、`robots.txt`からクロール拒否されていないかチェックする処理を作成したいと思います。

# robots.txtの構成

まずは、サンプルとしてQiitaのrobots.txtを拝借しました。
Qiitaのrobots.txtは以下のような構成になっています。

“`text:robots.txt
# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
User-agent: *
Disallow: /*/edit$
Disallow: /api/*
Disallow: /graphql$
Disallow: /policies/td-optout$
Disallow: /search
Disallow: *.md
Disallow: */i

元記事を表示

Laravel側でのIPアドレスによるアクセス制御

# IPアドレスによるアクセス制限とは
業務系Webアプリケーション構築時には、「特定のIPアドレスからのアクセスのみ許容したい」といった要件はありがちかと思います。
通常、インフラ側で制御すれば良い話ではあり、AWSであれば下記の方法で設定可能です。
– ALBのリスナールール
– ネットワークACL
– セキュリティグループ

# Webアプリケーション側で実装する必要性
前項の通り、AWSで設定することにより、簡単に実施できます。
しかし、下記のケースではどうでしょうか。
– ユーザーが二種類ある(user, admin)
– adminの中でも権限が分かれている
– adminの特定の権限のみIPアドレスによるアクセス制限を実施したい

「adminのみIPアドレスを制限したい」ということであれば、ALBのリスナールールでパス指定することにより、なんとかなりそうです。
厄介なのが、「adminの特定の権限のみ」という部分です。ログイン認証後しか判定できないため、Webアプリケーション側で実施する必要があります。

# 実装方法
MiddleWareを使って実装していきます。

元記事を表示

PHPでテストコードを書いてみる!単体・結合テスト、AAAについても解説!

# テストコードとは?

プログラムの動作を検証するために書かれるコードのことです!

# テストコードのメリット

– バグ検知
– コードに潜むバグの検知を早期に発見できます
– 関数の動作を表現できる
– テストコード自体が関数の使用方法を示すドキュメントになります
– リファクタリングの安全性確保
– 他メンバーがコードを修正する際にもテストが通ることで品質が保証されます
– テストコードが無いとどこまで影響範囲があるのか確認しなければなりません

# テストの種類

– 単体(ユニット)テスト
– 関数単位で正しく動作するか確認します
– 例: MVCフレームワークのモデルの関数のテスト
– 結合(インテグレーション)テスト
– 単体テストで確認した関数を組み合わせて連携してテストを行います
– 例: MVCフレームワークのコントローラーのアクションのテスト
– システムテスト
– システム全体が要件通りに動作するかを確認します
– アプリケーションがほぼ完成した段階で実施されます

# A

元記事を表示

セキュリティ対策について(レスポンスヘッダー等)

# ウェブセキュリティの強化:ヘッダーとCookieの設定方法

## はじめに
Webアプリケーションのセキュリティは、常に進化する脅威に対抗するためには不可欠です。
本記事では、サーバー応答のセキュリティを向上させるためのヘッダーの設定方法と、
Cookieの安全な扱い方について解説します。
サンプルコードはPHPになります。
またこれから扱う内容は検証ツールを開いてネットワークタブのレスポンスヘッダーの話しになります。
![スクリーンショット 2024-08-26 14.38.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2586109/d692eeea-1cbd-7c85-edab-a57d1501ab18.png)

## セキュリティヘッダーの設定

### X-Content-Type-Options

このヘッダーを`nosniff`に設定することで、ブラウザはMIMEタイプのスニッフィングを無効にし、指定された`Content-Type`のみを扱うようになります。これは、悪意

元記事を表示

CakePHP4.xのアプリをCakePHP5にアップグレードする とりあえずアップグレード編

## はじめに
PHPのバージョンやらMySQLのバージョンやらをあげるためにCakePHPも5に上げようと思い、手順を記録しておこうと思いました

### PHPとMySQLのバージョンを上げる
CakePHP5ではPHP8.1以上が必要です
今回は

https://qiita.com/scarym/items/6b5e813f0972896780fc

の通り、MAMP7で

* PHP8.3.9
* MySQL8.0.35

という環境で動かします

### アップグレード・ツールを使う

https://book.cakephp.org/5/ja/appendices/5-0-upgrade-guide.html

を参考にアップグレードツールをインストールします。
今回は現在動いているアプリを仮に「my_app_name」とします
まずは「my_app_name」に移動して
“`
git clone https://github.com/cakephp/upgrade
“`
my_app_nameの下に「upgrade」が出来るのでそちらに移動
“`
cd upgra

元記事を表示

Laravel初心者が掲示板作る【Laravel 8.x】

https://manablog.org/laravel_bulletin_board/

こちらの記事を参考にしてLaravel初心者がつまづいた所をまとめてみる。

# バージョン

Laravel version
8.83.27

PHP version
7.4.33

MuSQL version
5.7.39

MAMP version
6.9

# 進捗

現在、
投稿記事を表示するためのコントローラーをつくっていく
の章の
投稿一覧の表示ページを作成する
でつまづいている。

## 2024.8.1

### Seederが動かない
“`terminal:ターミナル
$XXX bbc % php artisan db:seed
Database seeding completed successfully.
“`
とりあえず、`php artisan db:seed`も
`php artisan migrate`みたいに
マイグレーションファイルやシーダーファイルも
一括で読んでくれるものだと勘違い。
実際はデフォルトだと`DatabaseSeeder`クラスを実行

元記事を表示

OTHERカテゴリの最新記事