PHP関連のことを調べてみた2021年09月05日

PHP関連のことを調べてみた2021年09月05日

【3枚目】おっさんが入門CakePHP (動画第4回)

今回の動画ではControllerとViewを使って文字を画面に表示するらしい。

【CakePHP3】ControllerとViewで画面表示【入門】

最初はMVCモデルについて説明。
分かり易く図示してくれてる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/694662fd-7765-650b-024a-42510850aacd.png)

今回はエディタとしてATOMを使用するとの事だが、ATOMのインストールについては説明がないので一応貼っておく。  ※他のエディタを使っても何も問題は無い。
ココからDownload → https://atom.io/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/841a6699-a0ee-2d8

元記事を表示

Laravelでuuidをidとするモデルを作りたいとき

LaravelのEloquentモデルのidは通常数値なわけですが、uuidを使いたい!といった場合があると思います。

そういった場合、

“`php
$post = new Post();
$post->id = Str::uuid();

$post->save();
“`

といった形を取るかもしれないのですが、もっと良い形で書く方法があって、それはイベントを利用する方法です。

“`php
class Post extends Model
{
protected static function booted()
{
static::creating(function(Post $model) {
$model->id = Str::uuid();
});
}
}
“`

このように書くことによってidをセットしてなくとも作成しようとするときに自動的にuuidが作成されて保存されます。

オブザーバークラスを作る方法もありますが、これくらいであればそのまま書いて良さそうです。

この辺

元記事を表示

dd();の使い方

初めまして。名倉と申します!メモをする事が重要だと気づき、早速初めてみました^^
第1回目ですorz

– dd();の使う意味

コントローラーが通って動いているか?
とあるボタンを押したら、情報が渡せているか?
と確認する事ができます。

メリットとしては、
こまめに確認することによって、

* どこで、
* どんな理由で問題が起きているか?

と早期発見することができます。

※ちなみに私は共同開発の終わり頃に知って、自分の頭で仮説実行して狂ったように時間が溶けて行ったことを覚えています。

– そもそも、dd();って何?

ヘルパ関数です。
指定された変数の内容を表示し、実行を停止します。

– 使い方

(例)
![D5BF7AB2-D74D-4E12-A535-13325717A5F4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1958909/c72845be-e3aa-f6cf-0979-f9d8e48a23df.png)

上記は、ArticleController.php

元記事を表示

PHP基礎

##最初に
今までphpを触ったことがなかったので基礎部分を学習しました。

—–

##基礎の基礎

phpはHTMLに埋め込んで使用可能。で囲まれた部分がHTMLに変換され表示される。

“`php
//文末に;(セミコロン必要)

//一行の時は;(セミコロン不要)

//変数は最初に$をつける
$sample = ‘hoge’;
“`

”(シングルクオート)は文字列をそのまま出力する。
“”(ダブルクォート)は変数を展開する。

:::note info
html表示の改行文字はbrタグ
ソース表示の改行文字は改行コード\n
:::

####出力

“`php

元記事を表示

DockerでLaravel×Nginxの開発環境を構築する(PHP8)

# 概要
Laravel×Docker環境を作成する事になったので、自身のメモついでに書いていきます。

# 構成
Nginx, php-fpm, MySQL, Docker, Docker Composeの環境構築します。
※今回は最小限の構成で作成するので、必要に応じて修正してください。

最終的には下記のようなディレクトリ構成になります。

“`
|── app
| |── Http
| └── …etc
├── docker
│   ├── app
│   │   ├── Dockerfile
│   │   └── conf
│   │      └── app.ini
│   └── nginx
│   └── conf
│   └── nginx.conf
└── docker-compose.yml
“`

# 各種バージョン
PHP 8.0.9
Mysql 8.0
Nginx 1.21.1
Laravel 8.54

# docker/app/Dockerfile
最終的にECSで稼働させる事を前提としていたため、イメ

元記事を表示

二分探索法について 値の探索(paiza)

# はじめに
paiza問題集 二分探索 値の検索(PHP編)を解いたので二部探索について自分用にまとめる。

[二分探索 値の検索](https://paiza.jp/works/mondai/binary_search/binary_search__basic_step0)

# 二分探索法とは?
探索の代表的なアルゴリズムの一つ。
探索対象のデータ群が***「昇順」***または***「降順」***に並んでいる場合に使用できる。
二分探索法は、データ群をざっくりと二つに分けながら対象を絞り込んでいく探索法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381376/ef2cafbb-62b4-527b-7c92-f2ba73c0d477.png)

上記画像の例で説明すると
まず、配列の真ん中の値である「7」と今回検索したい「9」を大小比較する。
9のほうが大きいため、探索範囲を右半分に絞る。
次の探索範囲の真ん中の値である「11」と検索したい「9」を大小比較する。
9のほうが

元記事を表示

Nextcloudにおけるphp-fpmのチューニング

#やたらNextcloudの動作が重い
前回Nextcloudのセットアップを記事にしましたが、そのまま使うとメモリが足りなかったりCPUのスレッドを食いつぶしたりすることが判明したので、それぞれのスペックに合わせたチューニングを書いておこうと思います。

#前提条件
* php-fpm+nginxの環境で動作していること。
* Nextcloudの最低推奨メモリ量である512MB以上を割り当てられるシステムメモリが搭載されていること。
* php-fpmのプロセスマネージャモードがdynamicになっていること。

#PHP-FPMのプロセスに関する項目の解説

###pm(プロセスマネージャモード)および関連設定値
プロセスマネージャが子プロセスの数を制御する方法と、子プロセスの最大、最小数の設定値。

“`
static
> 子プロセスの数を固定して稼働させる。
負荷が掛かってもメモリ使用量とCPU使用率があまり変化しない分、パフォーマンスが低下しやすい。

ondemand
> これについてはよく把握出来ていません。すみません。

dynamic <-今回はこの

元記事を表示

【Laravel】Trying to get property ‘〇〇’ of non-object(View: /〜/views/menu/index.blade.php) の解決方法

#エラー概要
このエラーは、〇〇に値が入っていないのに、プロパティを参照しようとしてるよっていうエラーです。

#エラー発生時のコード

“`php:menu/index.blade.php
@foreach ($items as $item)

{{$item->time}} {{$item->user->name}}

@endforeach
“`

“`php:MenuController.php
public function index(Request $request)
{
$items = Menu::with(‘user’)->get();
return view(‘menu.index’,[‘items’ => $items]);
}
“`

#解決方法
値がなくてもnullを返してくれるようにヘルパー関数`optional()`を使います。

“`php:menu/index.blade.php
@foreach ($items as $

元記事を表示

PHP 変数から変数名を取得する(PHP 変数名から変数を取得する)

どうしてこんな簡単な事に今まで気づかなかったのだろう…
変数から変数名を取得しようとする場合、変数名はすでにわかっているものなので、逆に、
変数名から変数を取得してもいいのです。

## 動機
PHP デバッグ時、「変数名・値」の対応表を出力したいことがあります。

変数が少ない時は、

“`php
echo ‘$変数名1 = ‘.$変数名1;
echo ‘$変数名2 = ‘.$変数名2;
“`

で十分なのですが、

「多くの変数を、いろんな場所で、どのように変化しているかチェックしたい」
「時々、変数のリストを変更したい(増やしたい)」
「チェックのための行が長すぎるのは嫌!」

そうなってくると、たくさんの場所で、
「変数の配列をユーザー関数で処理したい」
というニーズが出てきます。

ところが、ユーザー関数の内部では「スコープが異なる」ため、ユーザー関数の外部の変数を内部で直接扱う事はできません。「ユーザー関数に(引数として)変数を引き渡す」という作業が必要になります。

しかし、
「**変数**から**変数名**を取得する」のはなかなか大変なようです。そこで発想を転換

元記事を表示

Xdebug ブレークポイントで止まらない!

vscodeとxdegugで快適なデバッグ生活を送りたいと思いググりながら設定したのにブレークポイントで止まらない!

ハマった所をQiitaに残します

## 環境

Mac上にdocker環境を構築。

– docker
– php-fpm (PHP v8.0.8)
– xDegug v3.0,4
– laravel 8

php-fpmのコンテナにxdebugを入れる
(今回は直接コンテナ入って実行してます)

“`sh:
apk add autoconf build-base
pecl install xdebug
docker-php-ext-enable xdebug
“`

## xdebugの設定でまずハマる!

google先生に「vscode xdebug docker」等ででググるとxcodeのv2系の記事がヒットします。

https://qiita.com/gigosa/items/90431be7a6a79db78480

このような設定が書かれています。

“`ini:php.ini
[xdebug]
xdebug.remote_enable

元記事を表示

【Laravel】find()とfindOrFail()の違い

# find()とfindOrFail()とは
Laravelで提供されているデータ操作の為の機能であるEloquent ORMのメソッドのひとつ。指定したidのレコードを取得することができる。

# 2つのメソッドの違い
## 定義の仕方
### find()

“`PHP:
$flight = App\Flight::find(1);
“`

### findOrFail()

“`PHP:
$flight = App\Flight::find(1);
“`

## idが見つからなかったとき
* find():nullを返す。
* findOrFail():エラー(404HTTPレスポンス)を返す。例外処理。

# どちらを使うべきか
### findOrFail()の方が良い(と思う)
* 見つからなかった時に、nullかエラーか、どっちを出したいかで決めると良い。

## find()

* 全然違う場所にエラーが出てしまい、原因を見つけることが難しい。
* コントローラーでid番号を探すクエリを出したのに、エラー画面では、Viewファイルでエラーがあると出てしまう

元記事を表示

【Laravel】テーブルのリレーションについて

#リレーションとは
テーブル同士の関連付けのことを言います。
リレーションにはいくつかの種類があり、それぞれ関連付け方が異なります。
早速、リレーションの種類を1つ1つ見ていきたいのですが、ここでは主テーブルをuserテーブル、従テーブルをpostテーブルとして説明していきます。
※今回は、コントローラーやビューの記述は割愛させていただきます。

#リレーションの種類
##has One
「1対1」の関係で、主テーブルは従テーブルからデータを引っ張ってくることができます。
主テーブル側のUserモデルに以下のように記述します。

“`php:User.php
public function post()
{
return $this->hasOne(‘App\Models\Post’);
}
“`

##has Many
「1対多」の関係で、これも`hasOne`と同様、主テーブルが従テーブルからデータを引っ張ってきます。
主テーブル側のUserモデルに以下のように記述します。
`hasOne`は1対1でデータを1つしか取り出さないので`post`と単数形でしたが、`has

元記事を表示

[PHP] 集計期間等の範囲の決め方

どのサービスでも、一定期間内にどれだけのログインがあったか等の集計をするバッチはあったりするかと思います。

今回初めて集計バッチの実装をしたのですが、その中で集計期間の範囲を決める
ロジックに対して指摘を受けたので、今後同じミスをしないためにも書き留めておきます。

## 要件

– バッチ実行日は毎週火曜日11時とする。

– 期間は実行日から見て1週間前の日曜日から先週の土曜日とする。
– 例 実行日が8月24日(火)の場合、8月15日(日) ~ 8月21日(土)になる。

## Carbon
PHPを使用してる人なら日付操作にCarbonを使ってる人は多いのではないかと思います。
CarbonとはPHPのDateTimeクラスをオーバーラップした
日付操作ライブラリのことです。→ [Carbon 公式](https://carbon.nesbot.com/)

## 指摘を受けた実装例

要件を満たす実装として下記の様な方法で実装してました。

“`AggregateReport.php

$count_to_start_day = now()->dayOfWeek

元記事を表示

[PHP] TraitのUnitテスト

PHPの`trait`のユニットテストを書く方法です。

## public関数
以下のような`trait`の`public`な関数を考えます。

“`php
greeet());
“`

もしくは、無名クラスでもOK。

“`php
$SUT = new class() { use SomeTrait; };
self::assertEquals(‘hello’, $SUT->greeet());
“`

## protected関数
以下の

元記事を表示

composer installでS3のregionが設定されていないというエラーが出る

## 現象
composer installすると以下のようなエラーが出る。

“`
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover –ansi

InvalidArgumentException : Missing required client configuration options:

region: (string)

A “region” configuration value is required for the “s3” service
(e.g., “us-west-2”). A list of available public regions and endpoints can be
found at http://docs.aws.amazon.com/general/latest/gr/rande.html.

at /Users/shohei.hagiwara/s4bids_ponpare/admi

元記事を表示

Laravelのリソースコントローラー便利~~~!!

#リソースコントローラーとは
一般的なCRUD処理は以下の通り。
生成(Create)、読み込み(Read)、更新(Update) 、削除(Delete)

しかし気の利くLaravelちゃんには
「リソースコントローラー」という機能があり
7つの要素を持ったコントローラーを自動で作ってくれる。

|名前 |機能 |
|—|—|
|index |データを一覧表示 |
|create |新規作成用フォームの表示 |
|store |新規作成を保存 |
|show |作成データを個別表示 |
|edit |作成データ編集用フォームの表示 |
|update |編集したデータを保存 |
|destroy |データを削除 |

##実行方法
###コンソール画面

“`php
php artisan make:controller 任意のコントローラー名 –resource
“`

ふーん!やるじゃん!!
すごいじゃん!まだすごさを分かってないけど。
すごい予感がする。私の直感が!!鳥肌が立ってる!!

はい。リソースコントローラーでした!7つ

元記事を表示

【Laravel】SQLSTATE[HY000] [1045] Access denied for user ‘root’@’172.21.0.3′(using password: NO)エラーの解決方法(マイグレーション)

##【概要】
マイグレーション時、
SQLSTATE[HY000] [1045] Access denied for user ‘root’@’172.21.0.3′(using password: NO)
(意味:ユーザー’root’@’172.21.0.3’のアクセスが拒否されました。)
と返ってきた時の解決方法の一例です。

###1.開発環境
PHP 7.2.34
Laravel 6.20.32
Apache 2.4.6
mysql 8.0.26

###2.解決方法
キャッシュをクリアしてキャッシュを再作成した後、改めてphp artisan migrateをする。

“`
# php artisan cache:clear
Application cache cleared!

# php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

# php artisan migrate
Migration table created successful

元記事を表示

PHP を使用して Azure Blob Storage へアップロード

# 環境
– Windows10 Pro 64bit
– PHP 7.4.4
– Composer 2.1.5

ローカル環境にて PHP を使用した Azure Blob Storage へのアップロード検証。
以降、Cドライブ直下に `tutorial-azure-blob-storage` というフォルダを作成し、フォルダ内にて作業を実施。

# 事前準備

– Microsoft Azure Portal にてリソースグループ及びストレージアカウントの作成
– ホーム > ストレージアカウント名 > コンテナー
– コンテナーの作成(今回は `tutorial-container` を作成)
– ホーム > ストレージアカウント名 > アクセスキー
– 接続文字列をメモ

# microsoft/azure-storage-blob インストール
`microsoft/azure-storage-blob` をインストールする。

“`terminal
C:\tutorial-azure-blob-storage>composer require m

元記事を表示

【2枚目】おっさんが入門CakePHP (動画第3回)

第3回:CakePHPインストール【環境構築】

フレームワークのインストールですが動画見ていくと、
phpが動くか?まで確認するようです。
XAMPP入れた後何もしてないので
phpにpathが通っているはずもなくpathの設定手順まで説明してくれています。
Apacheのconfigを変更して再起動するとブラウザで確認できます。
![PHP_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/0fe0ba13-5522-d066-10b9-a9e872b5d3f7.png)

5年ほど前にcake使ったときは一個づつ入れてた気がするんだけど
今回はcomposerを使うようです。
![composer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/6ab367d0-204f-8781

元記事を表示

【Laravel】seeder(シーダー)の使い方

#はじめに
テーブルの用意ができている前提で話を進めていきます。

seederを使うと…
####テストデータをデータベースに挿入することができます。

#seederの使い方
1) まずは、ターミナルもしくはコマンドプロンプトで以下のコマンドを実行し、シーダーファイルを作成します。

“`
php artisan make:seeder UserTableSeeder
“`

2) コマンドを実行すると、「database」内の「seeders」内に「UserTableSeeder.php」が作成されるので、runメソッドに以下のようにコードを記述していきます。

“`php:UserTableSeeder.php
public function run()
{
DB::table(‘users’)->insert([
‘name’ => ‘yusuke’,
‘mail’ => ‘yusuke@example.com’,
‘age’ => ’32’,
]);
}
“`

3) デフォルトで用意されている「D

元記事を表示

OTHERカテゴリの最新記事