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

PHP関連のことを調べてみた2023年08月24日
目次

【Laravel】ログイン後に別のページに遷移する方法

## ログイン後、トップページに遷移させたい場合
app\Providers\RouteServiceProvider.php
以下のように修正する。
“`RouteServiceProvider.php
public const HOME = ‘/’;
“`
HOME定数の値を変更する。

RouteServiceProviderクラス:Laravelのルーティングを管理するクラス

元記事を表示

【Laravel】セッションタイムアウト時にログインページ遷移する方法

## セッションタイムアウトが起きる条件
・ログインした後、しばらく放置したあと操作を行う。
・formタグ内に`@csrf`を記述し忘れる。

## セッションタイムアウト時にログインページに遷移させる
app\Exceptions\Hander.php に以下のように記述する。
“`Hander.php
// 以下のuse文を追加する。
use Illuminate\session\TolenMismatchException;

// 省略

public function register()
{
$this->reportable(function (Throwable $e) {
//
});
}

// ※ここから記述する※
// セッションタイムアウト時はログインページにリダイレクトさせる
public function render($request, Throwable $exception) {
if ($exception instanceof TokenMismatchE

元記事を表示

【Laravel】ユーザーがログイン済みか認証する方法

ログイン機能を実装した場合、ログインせずにトップページにアクセスすると、
以下のエラーが発生する。
http://localhost/laravel-todo-app/public/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/43aad3ad-fa60-4d0b-2637-65ba7fc43ef4.png)

## ルーティングでmiddleware(‘auth’)メソッドを使用する。
routes/web.php でルーティングの末尾に`middleware(‘auth’)`メソッドを追加する。
“`web.php
// トップページでログイン済みか認証を行う
Route::get(‘/’, [GoalController::class, ‘index’])->middleware(auth);
“`

トップページにアクセスすると、ログインページにリダイレクトする。
http://localhost/laravel-todo-app/public/

元記事を表示

Requestクラスについて(Laravel)

## 初めに
Requestクラスをよく使用するので、メモとして残します。

## 環境
| 開発環境 |バージョン |
|———–|————|
| __Laravel__ | 10 |

## Requestファイルを作成する
“`terminal:
php artisan make:request Hogehoge
“`

## Requestクラス説明
“`php:HogehogeRequest.php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class Hogehoge extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool // ユーザーがこのリクエストを行う権限があるかどうかをチェックする。

元記事を表示

【Mac】brew install phpが実行できない

# brew install phpが実行できない
MacOSをBigsurからVentureにアップデートしました。VentureではPHPが標準でインストールされていないので、`brew insatall php`でインストールしようとしたがエラーが発生。
“`
Error: Failure while executing; `/usr/bin/env cp -pR /private/tmp/d20230821-25559-arl6cn/autoconf/. /usr/local/Cellar/autoconf` exited with 1. Here’s the output:
cp: /usr/local/Cellar/autoconf/./2.71: Permission denied
(省略)
cp: utimensat: /usr/local/Cellar/autoconf/.: Permission denied
“`

# 解決策

以下のコマンドで`/usr/local/`ディレクトリ内のファイルとディレクトリの所有者を変更したことで解決しました。
“`
su

元記事を表示

PHPの今を語る!4社合同勉強会を振り返る

# はじめに
普段主にPHPを使ってアプリ開発をしている@HaruKado777といいます。
7/26(水)に[【PHP Tech Talk】PHPの今を語る!4社合同勉強会](https://colopl.connpass.com/event/286658/)に参加しました。
勉強会で学んだことのアウトプットも兼ねて記事を書きたいと思います。

当日は下記のスケジュールで実施されました。

“`
19:10 PHP の新しいバージョンはどのようにして生まれるか / インフィニットループ
19:25 コロプラはなぜゲームアプリケーションで PHP を使い続けるのか / コロプラ
19:40 サイボウズとGaroonとThe PHP Foundationと私 / サイボウス
19:55 ふつうのpixivの作り方 / ピクシブ
20:10 パネルディスカッション・質疑応答
“`

「PHP の新しいバージョンはどのようにして生まれるか」についてがとても興味深かったので、今回はその記事について書きたいと思います。

# PHP の新しいバージョンはどのようにして生まれるか

## 新

元記事を表示

eloquentのget()とfirst()はレコードが取得できなかった時に返すものが違うよ

# はじめに
しばらく前に「良いコード/悪いコードで学ぶ設計入門」を読んで大変刺激を受け、コード設計というものに意識を向けるようになりました。
実践の一環として、上記書籍にも書いてあった「NULLを返さない」を実践しようとしたところ、表題の件ではまったので書き残します。
※記載事項に誤りなどあれば、コメントでのご指摘・編集リクエストをいただけますと幸いです。

# 本題
以下2本のeloquentにおいて、取得できるレコードがなかった場合、何が返されるか?
“`sample.php
// 1)
$result = User::select(‘id’)->get();

// 2)
$result = User::select(‘id’)->first();
“`

# 結論
* 1の`get()`は空のコレクションを返す
* 2の`first()`はNULLを返す

# ちょっと細かく見ていく

## 環境情報
* php 8.1
* laravel 9.19

## 実際に実行してみると
レコード0件のテーブル”users”に対して、それぞれのメソッドを実行、
その返り値$res

元記事を表示

【Laravel】formのaction属性に設定したURLがhttp始まりでPOSTメソッドの処理がうまくいかなかったときにやったこと

## 環境
– PHP 8.0.28
– Laravel 9.52.15
## 事象について
POSTメソッドで実行されるフォームを動かしたところ
なぜかGETメソッドで実行されてしまう事象が発生。

### 実行結果
submitボタンを押したら見慣れない画面が出てきた…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737484/ed636678-74b3-77ef-e11a-b516a4d0a677.png)

このまま送信をしたら、なんかGETで呼び出されてる…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737484/abe13051-7c8b-da96-39e6-9d64b56a9d74.png)

## 原因
フォームのaction属性に定義されてるURLがhttps始まりではなくhttp始まりになって
混合フォームとなってたことで想定外の処理結果となってた模様

元記事を表示

Laravel ログイン認証に使用する項目を変更する

Laravelを使ってログイン認証を作成した場合、初期状態ではemailとpassowordのセットをPOST送信することでログインできる形にLoginControllerが作成されますが、別の項目を使ってログインするようにしたい場合、ちょっとした工夫が必要となります。

## 経緯
メールによる認証トークンを使った二段階認証の実装時、最終的なログインの値をemail・passwordではなく二段階認証トークンにする必要がありました。
ログインに使用するパスワード項目を変更するのにEloquentUserProviderをオーバーライドする方法しか見当たらなかったため、備忘録として記載しておきます。

二段階認証の具体的な実装方法については省きますが、以下のようなフローに組み替えることで最小限のオーバーライドで対応することができました。
– 1ページ目でID・パスワードを送信して`Hash::check()`によるパスワードの整合性チェック (ここは自前で実装)
– 2ページ目で2段階認証トークンを入力させてで本来のログイン機構(attemptLogin)を使用して権限を付与する

#

元記事を表示

【Laravel】独自のCSSファイルを読み込む方法

## publicフォルダ内にCSSファイルを格納する
①publicフォルダ内にcssフォルダを作成する。
②cssフォルダ内に、`style.css`を作成する。

## viewでcssファイルを読み込む
○○.blade.phpのheadタグ内に以下のように記述する。
“`○○.blade.php “`
assetヘルパー:publicフォルダ内のファイルにアクセスできる(URLを取得する)。引数はpublicフォルダをルートにしたパスを記述する。

## resourcesフォルダにcssファイルを置かない理由
resourcesフォルダに置くファイルは、外部に公開されないファイルを置くため。

・resourcesフォルダ:外部に公開されないコンパイル前のファイルを置く。
・publicフォルダ:外部からアクセスしても問題ないファイルを置く。(例:通常のcssファイル、jsファイル、画像ファイルなど)

元記事を表示

【Docker】ftpでアップロードしたファイルをWebブラウザで表示させる

Dockerに関する情報は色々とあります。
– ①DockerでPHPを表示させる。
– ②Dockerでftpを使って、ファイルアップロードする

ここまでは、世の中のサイトに色々と情報があったので、実現できました。ですが、今回やりたかったことは①と②の合せ技、つまり
– ③Dockerで構築したftpでPHPファイルをアップロードし、Webブラウザで表示させる

この方法がどこを調べても載っていなかったので、調べて備忘録として置いておきます。ちなみに自分はDockerについては勉強開始中の初心者なので、説明はかなり端折っています。

# 使用環境
今回の環境は以下の通りです
– Windows10 64bit
– Docker Desktop
– HyperV
– Ubuntu22
– WSL2
– PHP8.1
– Apache2
– ffftp3

# PHPを表示する
今回PHPはApacheを使って表示させます。DockerでPHPを表示させるには2つの基本を押さえておけば大丈夫です。
– webサーバーの選択(Apache、Nginx)し、PHPの使用バージョンを選択する

元記事を表示

夏休み中、ブラックジャックを開発する

## はじめに
[独学エンジニア](https://dokugaku-engineer.com/)という教材を使用してプログラミングの学習をしています。

https://dokugaku-engineer.com/

今回のブラックジャックゲーム開発は、【PART3 PHPとオブジェクト指向】の学習内容を集大成とするものです。その個人開発の過程を記録しました。

### なぜブラックジャックなのか
– ルールがシンプルで、基本的なプログラム構造や条件分岐、ループなどの概念を学ぶのに適している。
– 実際のカードゲームとして広く知られており、多くの人にとって馴染み深い。
– プロジェクトが小規模から始められる。
– 基本的なバージョンを作成した後、さまざまな拡張や改善を加えることができる。

上記の理由から、初学者が『PHPの基礎とオブジェクト指向の習得』を証明するプロジェクトにブラックジャックはちょうど良いと言えそうです。

### 目的
– これまで学んだ『PHPの基礎とオブジェクト指向』の理解を深めるため。
– 学習が身についていることを証明するため。

## 開発をはじめる

元記事を表示

Laravelの日付表示でタイムゾーン指定のアクセサをつくる

# Laravelのアクセサは便利
## アクセサてなに?
データベースから取ってきたデータが予め加工されてると表示時にごちゃごちゃせんでええので、楽やん?っていう発想

こういうのが余計なコードを増やさずに簡単にできます
“`
夏休みの終わりは2023-08-31T23:59:59+09:00です。
“`
こう
“`
夏休みの終わりは2023年08月31日23時59分59秒です。
“`

# そんなのmodelでちょちょいとやれば簡単さ
modelにこう指定してあげて
“`
protected $casts = [
    ’ended_at’ => ‘datetime:Y年m月d日H時i分s秒’,
];
“`

bladeでは
“`
夏休みの終わりは{{ $model->ended_at }}です。
“`

とすれば簡単にできちゃいます。

# あれ?9時間違う気が・・・
“`
夏休みの終わりは2023年08月31日14時59分59秒です。
“`

そうです、この方式だとタイムゾーンを考慮せずになんでもかんでもUTCとして解釈されます

# そこでアクセサの出

元記事を表示

htaccessによるベーシック認証の書き方(パスワード認証)

昨日こんなツイートをしました。このツイートを見ただけじゃベーシック認証の書き方などわからないとおもいます。ので今回はもう少し深堀していこうと思います。

HTMLでアップロードしたファイルのデータをPHPで取得・格納する方法

## 1. HTMLでのファイル選択

HTMLでファイルを選択するためのフォームを作成します。

“`html



“`

このフォームは、ファイルを選択し、`upload.php`にデータをPOSTするためのものです。

## 2. PHPでのファイルデータの取得

`upload.php`で選択されたファイルのデータを取得します。

“`php

元記事を表示

LaravelをIDEAなどで使う場合に補完させる方法

つい忘れてしまうのですが、IDEA制IDEなどでLaravelのメソッド、プロパティなどの補完を有効にする方法です。

# インストール

“`bash
composer require –dev barryvdh/laravel-ide-helper
“`

# 作成

下記の3つを実行すると作成されます。

“`bash
php artisan ide-helper:generate
php artisan ide-helper:models -N
php artisan ide-helper:meta
“`

| オプション | |
|—|—|
|generate | ファサード用のPHPDoc作成 |
| models | モデル用のPHPDocを作成。`-N` オプションをつけると個別ファイルへの書き出し。|
| meta | PhpStorm 用のメタファイルの書き出し |

モデル用のPHPDocについてはモデルファイルへの書き出し、または個別ファイルへの書き出しをすることができます。
モデルファイルに書き出しをしてしまうとモデルファイルに独自に書い

元記事を表示

【PHP8.3】標準関数のオーバーロードを削除してシグネチャをひとつにするよ

言語によっては、同じ名前のメソッドを複数定義できるものがあります。
一般的にオーバーロードと呼ばれる機能で、Javaなど型が厳格な言語ではよく見ます。

“`java:Java
public class Foo {
public static void bar(int val) {
System.out.println(“int型の” + val);
}
public static void bar(String val) {
System.out.println(“String型の” + val);
}
}

Foo::bar(1); // int型の1
Foo::bar(“1”); // String型の1
“`

引数の型によって別のメソッドが実行されます。

翻ってPHPは、同名のメソッド・関数を定義することができません。
昔のPHPは引数に型を書くことができず、区別をつけることができなかったからです。
今は引数の型を書くことができるようになりましたが、別に書かなくても動くので今でも区別できません。

とこ

元記事を表示

php7 バージョンアップに伴う変更箇所

# eregi_replace → preg_replace

# split → explode

# 配列は初期化
Uncaught Error: [] operator not supported for strings

“`php
$arr = “”;
$arr[] = $arr ;
“`
↓OK
“`php
$arr = array();
$arr[] = $str;
“`

# 関数に渡す引数が少ないとエラーが出る
エラー内容
Uncaught ArgumentCountError: Too few arguments to function test()

https://www.php.net/manual/ja/migration71.incompatible.php
> これまでのバージョンでは、ユーザー定義の関数に渡す引数が足りない場合は warning が発生していました。PHP 7.1 以降では、warning ではなく Error 例外が発生するようになります。 この変更はユーザー定義の関数に対してだけのもので、 内部関数には影響を及

元記事を表示

Laravelにおけるハッシュ関数bcrypt()について

## 1. はじめに

Laravelでハッシュ関数を利用する際、`bcrypt()`を使っています。具体的にどういう処理が走っているのか、セキュリティに問題ないのかが気になり調べてみました。

## 2. 対象読者

– Laravelを使った開発者
– 暗号やセキュリティに興味がある方

## 3. 目次
– [1. はじめに](#1-はじめに)
– [2. 対象読者](#2-対象読者)
– [3. 目次](#3-目次)
– [4. バージョン](#4-バージョン)
– [5-1. `bcrypt()`について](#5-1-bcryptについて)
– [5-2. 内部処理](#5-2-内部処理)
– [6. さいごに](#6-さいごに)
– [7. 参考サイト](#7-参考サイト)

## 4. バージョン

– Laravel 9.x

## 5-1. `bcrypt()`について

`bcrypt()`はヘルパ関数の1つです。

概要と使い方は[日本語訳されたLaravelドキュメント](https://readouble.com/laravel/9.x/ja/helpers.

元記事を表示

OTHERカテゴリの最新記事