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

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

PHP 定義済み定数 DIRECTORY_SEPARATOR 個人メモ

# 目的

– 定義済み定数である`DIRECTORY_SEPARATOR`の存在を初めて知ったのでメモ的にまとめておく

# DIRECTORY_SEPARATORは名前通りディレクトリの区切り文字が格納されている定数

– 下記のように記載して実行してみる。

“`php
echo DIRECTORY_SEPARATOR;
“`

– `\`が出力された。
– この定義済み定数はOSによって`¥`を返したり`\`を返したりするらしい。

元記事を表示

input type=”checkbox”で複数チェックすると最後の値しか表示されない

##現象
3つのチェックボックスを作り、複数チェックしてデータを送信すると、最後にチェックした値しか表示されない。(1つのみチェックしているときは正しく表示される。)

||例1 |例2 |例3 |例4|
|—|—|—|—|—|
|user1|✅ |✅ | |✅|
|user2|✅ | |✅ |✅|
|user3| |✅ |✅ |✅|
|結果|user2のみ |user3のみ |user3のみ |user3のみ|

##上手くいかなかったコード
“`html:form.html


元記事を表示

プログラミング初心者が書いたMVCモデルについて

はじめに
——-
現在私はPHPとLaravelを学んでいるのですが、そのLaravelの中で重要となってくるのが
「MVCモデル」と呼ばれる考え方です。

拙いですが自分の備忘録として他の方の記事などを参考にしながら
下記に「MVCモデル」の特徴を書いていきたいと思います。

MVCモデルとは
——
Model、View、Controllerの3つの役割に分割してコーディングを行うモデルのことです。
今回はRouterの説明も一緒に書いてみたいと思います。

・Model
→主にDBを操作する役割を持っています。
 具体的にはデータをDBへ保存、DBからデータを取得、DBのデータの更新や削除を行います。
 DBの編集・管理をするときに使うのが「マイグレーション」になるのですが、まだ理解が追いついていないので割愛します。

・View
→ユーザーが実際に見る画面を表示する役割を持っています。
 Controllerから受け取ったデータ(レスポンス)を画面に表示したり、ユーザーからのリクエストをControllerへ送信したりします。

・Controller
→Mode

元記事を表示

PHP8.1でenumが使えるようになる!

# PHP8.1からenumが使えるようになります
PHP8.1は2021年11月25日リリース予定です。
追加される新機能は以下を参考
https://stitcher.io/blog/new-in-php-81
その中で注目の一つはenumが追加されることかなと思います。

# 実際にどんな感じに使えるのか?

## enumの宣言
まずは以下のようにenumを宣言します。

“`php
enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
}
“`
## 宣言したenumを利用する
以下のようにコンストラクターでenumを引数として利用します。

“`php
class BlogPost
{
public function __construct(
public Status $status,
) {}
}
“`

先ほど作成したBlogPostのインスタンスを作成します。
この際に、作成したenumのStatusを引数として与えます。
`Status::

元記事を表示

【PHP8.1】読めるけど書けないプロパティが作れるようになる

`新潟`←ちょっとこれを読んでみてください。

読めましたね。

ではちょっと画面から目を離して、`niigata`←これを漢字で書いてみてください。

8割くらいの人は書けなかったんじゃないかなと思います。

ということで、`読めるけど書けない漢字`になぞらえて、`読めるけど書けないプロパティ`は[新潟アクセス修飾子](https://www.google.com/search?q=%E6%96%B0%E6%BD%9F%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E4%BF%AE%E9%A3%BE%E5%AD%90)と呼ばれています。

“`php
echo $object->property; // できる
$object->property = 1; // できない
“`

もちろんこの呼称はネタですが、でも実際protectedやprivateを使う理由の98%は『読まれてもいいけど書き込ませたくない』だけじゃないですか。
そのためだけにいちいち値を出し入れするだけの`setter/getter`を作ったり`__set/__get`あたりでな

元記事を表示

PHP serverで「Not Found The requested resource / was not found on this server. 」が出たときの対処法

VSCodeで、PHP serverを使用して
ローカルホストでPHPファイルを確認しようとしたところ、
下記のような画面になりました。

![スクリーンショット 2021-07-12 18.25.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952495/9b25f47d-e594-37e9-f02f-f492517bce11.png)

「Not Found The requested resource / was not found on this server. 」
と出ています。

コンソールを見てみると、
「Failed to listen on localhost:3000 (reason: Address already in use)」
というエラーが出ていました。

##前回きちんとstop serverせず終了したのが原因

前回何らかのPHPファイルをローカルホストで確認したのを
きちんとプロセス終了せずに終わってしまったのが原因でした。
今立ち上げているPHPを終了

元記事を表示

【PHP】strpos関数で文字列が特定の文字を含んでないか調べるときの注意点

##はじめに
strpos関数使って文字列のチェックを行う際に、想定外の挙動になって少しあせったので自戒の念を込めて記事にします。PHPあるあるな内容だと思います。

##strpos関数について簡単に
strposは文字列内の部分文字列が最初に現れる場所を見つけることができます。

もう少し詳しく説明すると、
文字列の中に特定の文字が含まれている場合はその位置の数値
含まれていない場合はfalse
を返します。

公式マニュアル:[PHP: strpos – Manual ](https://www.php.net/manual/ja/function.strpos.php)
※ちなみに本記事の以降の内容はマニュアル内でしっかり言及されていました。みんな、しっかりマニュアル読もうね。

##注意点
– strposを使って、特定の文字を含んでないかをチェックする場合は厳密比較を使う。

厳密比較とは===を使った比較のことです。

反対に、曖昧比較は==を使った比較のことです。
また、`if (!strpos($string ,$findme))`のような書き方も曖昧比較になります。

元記事を表示

Laravel バッチ処理の実行

#プログラムからのバッチ処理実行

Laravel ではバッチ処理を artisan を使用して実行する事が出来ます。
具体的には**cronに実行コマンドを登録する**、**プログラムから実行する**、という方法があるのでこれらのやり方を記します。
※バッチプログラムの追加から登録、実行まで

##バッチ処理プログラムの追加
まずはバッチ処理を記述するファイル(PHPファイル)を以下のコマンドで作成します。

“`
$ php artisan make:command BatchTest
Console command created successfully.
“`

実行すると ./app/Console/Commands/ 配下に BatchTest,php が作成されます。

“`
ls -la ./app/Console/Commands/
-rw-rw-r– 1 vagrant vagrant 675 7月 12 11:55 BatchTest.php
“`

出来上がったファイルを開いてみます

“`php:BatchTest.php

元記事を表示

PHPで超ミニマムjson-serverもどきを作る

[JSON Server](https://github.com/typicode/json-server)と同等の機能でPHP環境で動く物を探していたけど、結局「使う機能に絞って自分で作っちゃえ」ってなったという記事です。
さくらのレンタルサーバ ライトプラン(PHP7.4)で動作確認しました。

# 対象の読者
– APIでJSONを返すモック環境を手軽に構築したい
– PHPが動くサーバがある
– ComposerやNode.jsを使えない

# JSON Server とは
[JSON Server](https://github.com/typicode/json-server)はAPIのモックです。
モックなので本番利用するものではありません。
公式にも、`(略)who need a quick back-end for prototyping and mocking.` とあります。

https://github.com/typicode/json-server

日本語の記事でざっと特徴を掴みたかったので、こちら↓の記事も参考にしました。

https://www.w

元記事を表示

PHP usortユーザ定義ソートを使ってみる

Every Qiita #10
のんびり独学初学者の毎日投稿チャレンジ 10日目
今回は・・・
前回記事でご教示頂いたソートに関しての備忘録です。
[@tadsan](https://qiita.com/tadsan)さんありがとうございました!

###前回の多重連想配列構造

“`php
$arrs = [
[“fruit” => “apple” ,”num” => 1 ],
[“fruit” => “banana” ,”num” => 3 ],
[“fruit” => “melon” ,”num” => 5 ],
[“fruit” => “orange” ,”num” => 4 ],
[“fruit” => “peach” ,”num” => 2 ],
];
“`
こちらをnumを基準として昇順でソートするのが目標になります。

####前回の実装の流れ
1. asortを使って昇順ソートする
1. asortを多重配列で使う場合は、配列の最初の値が比較対象になる。
1. fruitが対象なのでローマ字昇順になってしまう
1. num

元記事を表示

Clone all repositories in your github organization with php

* source

“`php
$gat = getenv(‘GITHUB_ACCESS_TOKEN’);
$go = getenv(‘GITHUB_ORGANIZATION’);
$p = 1;
do {
$o = `curl -H “Authorization: token $gat” https://api.github.com/orgs/$go/repos?page=$p`;
$arr = json_decode($o);
foreach($arr as $k => $v) {
$sshurl = $v->ssh_url;
print($sshurl.”\n”);
`cd ~/src; git clone $sshurl`;
}
$p++;
} while (count($arr));
echo “done”;
“`

元記事を表示

Laravelアプリデプロイ後にView [auth.register] not found.

## 概要
Herokuに自作アプリをデプロイした際、とてもしょうもないことに時間を費やしたので自戒も込めて備忘録を書く。

## 環境
PHP:7.3.28
Laravel:6.20.0

## 結論

authディレクトリのregister.blade.phpファイルが見つからないと言われているのでフォルダ名の変更をすれば良い。
実際にherokuにデプロイされているアプリのフォルダ名を見にいく。

“`
$ heroku run bash
“`
やっぱりローカル環境ではauthなのに本番環境ではAuthになってる。

まず、gitでフォルダ名の大文字小文字変更の差分を反映させるような設定を行う。

“`
$ git config core.ignorecase false
“`

※デフォルトではtrueになっていて、フォルダの大文字小文字変更は差分として認識されない←これを知らなくて詰まった

あとはadd→commit→pushで無事動くようになるはず

普段GitHubにあげている段階でなかなかフォルダ名が大文字に変わってるって気づかないですよね…
## 参考記

元記事を表示

Create your own `upsert` method

Occasionally, you may need to update an existing record or create a new record if no matching record exists. You will wish to conduct it by one statement, thus `UPSERT` is your solution

![upsert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1709868/7c32aabf-5ad6-465f-4271-9b1ff98901a1.png)

`UPSERT` is one of the essential features of DBMS software for managing the database. This operation allows the DML users to insert a new record or update existing data into a table. An `

元記事を表示

laravelでルートパラメーターを設定したルーティングで404エラー

今回の経緯

※かなり初歩的な内容です。

laravelでルートパラメータを設定してルーティングしたら404エラーが返されました。
ちなみに以下のコード。

“`
Route::get(‘/students/{class-id}/{subject-id}’,[Controllers\StudentsController::class, ‘showStatus’])->name(‘students.status’);
“`
初歩的な誤りですね。

PHPにおいて変数名にハイフンは使えないので、404エラーが返されていたわけです。
素直にアンダーバーで対応することで無事解決しました。

“`
Route::get(‘/students/{class_id}/{subject_id}’, [Controllers\StudentsController::class, ‘showStatus’])->name(‘students.status’);
“`

ちなみにPHPにおいて変数の命名で気を付けたいのは以下。
1.数字から始めるのはダメ
  例:$1hoge ×
2.使

元記事を表示

今更ながらLaravel8.xのComponentを使う

今更ながらLaravel8.xを触ってみたりしたので、忘備録として。

# 6.x以前の話
6.x以前は`@component`ディレクティブを利用してコンポーネントを読み込んでた方も多かったと思います。

“`php:xxx.blade.php
@component(‘alert’, [‘foo’ => ‘bar’])

@endcomponent
“`

第二引数で値を渡して、`@if`とかの条件分岐でモギモギする感じでしたね。

# Component作成コマンドの追加
7以降では新たに以下のコマンドが追加されています。

“`shell
php artisan make:component Alert
# サブディレクトリに配置する場合は「/」で区切る
php artisan make:component Common/Alert
“`

このコマンドを利用した場合、コンポーネントのbladeテンプレートは`resources/views/components`以下に配置されます。
また、`app/View/Components`内にAlertコンポーネン

元記事を表示

PHP 多重連想配列のソート

Every Qiita #9
のんびり独学初学者の毎日投稿チャレンジ 9日目
今回は・・・
PHPでの多重連想配列の並べ替えに関しての備忘録です。

###asort関数を使ってみる
“num”のキーを昇順に揃えていきたいと思います。

“`php5
$arrs = [
[“fruit” => “apple” ,”num” => 1 ],
[“fruit” => “banana” ,”num” => 3 ],
[“fruit” => “melon” ,”num” => 5 ],
[“fruit” => “orange” ,”num” => 4 ],
[“fruit” => “peach” ,”num” => 2 ],
];
asort($arrs);//返り値はbool
foreach ($arrs as $value) {
echo $value[“num”].$value[“fruit”];
}
“`
####結果
asortで昇順にしたので見てみましょう。

“`
1apple
3banana
5melon
4orange
2

元記事を表示

PDOについて(備忘録)

備忘録的なやつ,RDBMSはmysqlを想定

■レコード取得

“`php

query($sql);
//②アロー演算子でfetchAllメソッドでの戻り値(配列にしたもの)を$resultに格納
$result = $d

元記事を表示

マルチコンテキストな Laravel 製アプリケーションでクラスをどこに配置すればいいか

## この記事について

複数のコンテキストが存在するアプリケーションにおいて、コンテキストに依存するクラスの配置場所に関するガイドライン的な記事です。社内向けに書いたんですが、汎用的に使えると思うので、ドメインを変えて公開します。

マルチコンテキスト、という名称が一般的かどうか疑わしいので、どなたか適切な名前をご存知の方教えてください(マルチ認証とかマルチログイン、というのは見つけましたが、認証が焦点ではないのでちょっと違う)。

## はじめに

### マルチコンテキストとは

アプリケーションにおいて、マルチコンテキストは以下の2つに大別されるかと思います。

1. アプリケーションが複数のアクター(ロールの異なるユーザー)から使われる
2. アプリケーションが複数の目的で使われる

1 は 2 に包含されていると思いますが、実装が大きく異なるので分離しました。わかりやすく言えば、Laravel でいうと、ガードが複数ある状態です。

例として、EC サイトで、一般消費者ユーザー(Consumer)と店舗の従業員ユーザー(ShopStaff)にそれぞれ別のサイトを提供するが、

元記事を表示

Vue.jsで非同期検索の実装。

# はじめに
オリジナルアプリを作成中、ストックしたレシピの検索を非同期で実装したいと思い挑戦。
その中でいくつか躓いた点があったため記録として残します。

以下が最終的な形です。
完成の動きは`Qiitaのストック一覧の検索`を目指しました。
![c1ed4252c1d1d32a04bad4dd96342256.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1379469/91d8af15-0643-208f-1645-a738cf1507ad.gif)

# もくじ
[1. 検索フォーム設置](#1-検索フォーム設置)
[2. リレーション関係であるデータの取得](#2-リレーション関係であるデータの取得)
[3. 非同期検索機能の実装](#3-非同期検索機能の実装)
[4. aタグのリンク](#4-aタグのリンク)
[5. 日付のformatの表示方法](#5-日付のformatの表示方法)
[6. レンダリングの並び順を変える](#6-レンダリングの並び順を変える)

# 条件

“`
ma

元記事を表示

PHP基礎忘備録

#PHP忘備録
PHPの学習における自分用の忘備録です。

##MAMPのインストール
https://www.mamp.info/en/downloads/

インストールを終えたら、Preferenceから各設定を行う
General
ここでは、MAMPのスタートとストップ時に行う動作を設定する
例えば、MAMPを立ち上げと同時に、サーバも起動する等

Ports
ここでは、アクセスする際のポート番号を設定する
基本的にサーバは80 MySQlなら3306の初期設定を採用してれば問題ない
MAMPdefaultでもいいが、初期設定の方が他の文献を見る際も、脳内変換しなくていいので楽

Server
Document root ここでアプリケーションへのアクセスのエントリポイントを設定

Cloud
現状使用していないので割愛(使用機会に恵まれたら追記します)

学習内容を今後も追記していきます。

##PHP基礎
PHPタグ(HTML内)

“`.php

//=>表示
↓省略版

元記事を表示

OTHERカテゴリの最新記事