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

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

laravelでgmailを使ってのメール送信ができない(laravel Expected response code 250 but got code “530”)

下記の記事を参考にgmailのサービスを使ってlaravelからパスワードリセットのメール等を送れるように試みました。

環境
IDE AWS cloud9
laravel6

設定は完了したものの所々でエラーに捕まったのでシェアします

https://qiita.com/hiro5963/items/df062ab19e8ceba4573f

#エラー
## 前提のcache等のクリア

.envファイルを書き換えたら必ずcacheをクリアしましょう。クリアしないとenvファイルの内容が反映されません。

“`
php artisan cache:clear
“`

下記の記事を保存しておきましょう
https://qiita.com/Ping/items/10ada8d069e13d729701

## config/mail.phpの確認

envファイルの内容はconfigファイルを経由して反映されます。
envファイルの内容によって変わります

“`php:.env
MAIL_DRIVER=smtp
“`

の場合には

“`php:config

元記事を表示

PHPで1年分の月を出力する。

##PHPで一年分の月を出力する。

データベースに月毎でデータを保存しているってことはまあまああることだと思います。
一年単位で一括更新したいデータがあったのですが、テーブルが別れているのでめんどくさいのでfor文で一気に更新してしまいます。

for文といえば

“`php
for($i = 0; $i < 12; $i++){ //なんか処理 } ``` こんな感じだと思うんですけど、今回は ```php $to_month = date("Ym"); //1年後 $limit_month = date("Ym", strtotime(date("Ymd")." +1 year")); for($m = $to_month; $m <= $limit_month; $m = date("Ym", strtotime($m."01 +1 month"))){ echo "

“;
    var_dump($m);
    echo “

“;
}

// string(6) “202109”
// string(6) “202110”
// st

元記事を表示

PHPの業務経験6ヶ月で初めてOSSにContributeした話

注) これはポエムです。

## 背景

エンジニアとして働き始めてから、OSSへのContributionに強いあこがれがあったが

– ヨワヨワエンジニアの自分がOSSのコードなんていじれるのだろうか
– そもそもOSSのコードに自分が介入する余地なんてないんじゃないか

なんて考えていた。
しかしやってみたら心配は杞憂だった。
OSSにContributionしたいと思っている人の参考になればと、自分がやったことをメモ。

## 筆者のスペック (当時)

– エンジニア歴 1年半
– PHP, Laravelの業務経験 半年

## Contributeまでの軌跡

### 業務でとあるOSSを使う

LaravelにはExcelファイルをインポート、エクスポートできる[Laravel Excel](https://laravel-excel.com/)というライブラリがある。
業務で開発中のプロジェクトでこれを使う機会があったのだが、これが結構よくできたライブラリで[^1]、とても簡単にExcelエクスポート機能等を実装できる。[^2]

### キャッチアップを兼ねてサンプ

元記事を表示

Laravel8でAdminLTE3を使用する方法

# 概要

この記事では、管理画面として有名なテンプレート`AdminLTE3`をLaravel8で使用する方法について記述していきます。
前提として、既にLaravelのセットアップは完了している事としています。

# Laravel-AdminLTEをインストールする

下記の通り`composer`コマンドを使ってLaravel-AdminLTEをインストールします。

“`
$ composer require jeroennoten/laravel-adminlte
“`

インストールが完了したら下記のコマンドで`adminlte`コマンドが使えるようになっている事を確認します。

“`
$ php artisan list
“`

上記のコマンドを実施した結果、下記のようなリストが表示されます。

“`
adminlte
adminlte:install Install all the required files for AdminLTE, and additional resources
adminlte:plugins Man

元記事を表示

Laravel JetStream PWリセット時にメールアドレス入力を除外したい。

JetStreamでPWリセットする際にメールアドレスを入力せずに
変更するのどうしたらいいのかな?と思いました。

## パッと考えたこと
– メール送信時にCookie を設定して、PW変更画面で読み取って表示
– 送信するトークンにメールアドレスを追加してControllerなどでうまく処理する。

## 結論
送信されるリセットメールのurlパラメータ見てませんでした。

`http://localhost:8080/reset-password/{トークン}?email=ogaki.kana%40example.net`

`auth/reset-password.blade.php`で使用されている
input typeを変更するだけでした。

“` php
Laravel date型カラムの取り扱いに注意

## エラーの詳細
例えば`User`モデルに`date`型の`birthday`というカラムがあるとする。

この`birthday`を

“`php
{{ $user->birthday->format(‘Y/m/d’) }}
{{ $user->birthday->format(‘Y年m月d日’) }}
“`

上記のようにフォーマットを変更して表示する場合、`User`モデルに

“`php
protected $dates = [
‘birthday’
];
“`

とすると**`birthday`は`Carbon`インスタンスとなるため、フォーマットを変更できる。**

しかし、フォーマットを変更して表示している場合`birthday`が`null`だと下記のようなエラーになる。

“`
Call to a member function format() on null
(nullなのにメンバー関数format()を呼び出しています)
“`

エラーを回避するために下記のようなNull合体演算子を書いてみたが、それでも`null`の場合、同じエラーになる

元記事を表示

【laravel】Auth::loginでログインできたと思ったらできていなかった問題

とある機能の実装をしていまして、

`Auth::login`メソッドを使ったログインが必要になったのですが、、、、

ハマってしまった。。。

ありのままに起こったことを話そうと思います。

# 現象

ユーザのオブジェクトを入力してログイン認証を進めてくれる`Auth::login`メソッド。

期待通り、ログインが成功して、期待通り、ログイン後の画面遷移が行われるはずだったのですが….

まさかの 401 unauthorized エラー

# 原因

どうやらログインそのものはできていたものの、セッションが保持されていなかったようです。

なので、セッションを保持させる解決策が必要。。。。

# 解決方法

`app/Http/Kernel.php`の設定をいじる必要があったようです。

設定ファイル内の`$middleware`に`\Illuminate\Session\Middleware\StartSession::class`を追加

“`php:app/Http/Kernel.php
protected $middleware = [
…,

元記事を表示

ほけん相談SNS『ほけんとーく』を作ってみた

#はじめに

私は、実務未経験でこのサービスをチームメンバーと一緒に開発しました。
これからサービスを作りたいという人少しでも参考になれば幸いです。

###自己紹介
執筆時点で24歳、都内の文系大学を卒業して、金融企業に務めております。
2020年8月にプログラミグングを始め、プログラミングの基本を勉強いたしました。

#「ほけんとーく」とは
保険の悩み共有アプリ「ほけんとーく」です。
このアプリを通して目指すものは、ユーザーが保険の悩みを共有して①解決のヒントや、②安心感、③考えるきっかけ 以上のようなものを得るためです。
(直接保険営業マンとマッチングすることや、WEB上で保険の成立を目的とはしない)
![og.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1050579/b5a21daf-e6e9-0ba8-b236-8f8ec56caf9c.png)

#開発のきっかけ
発案者が保険会社で代理店営業を行なっていた際の経験をもとに、以下の理由でサービスの開発に至りました。
①保険に興味はある

元記事を表示

結構使うけどすぐ忘れる関数の使い方

##結構使うけどすぐ忘れる関数の使い方

phpの関数で使用頻度高いけど毎回ググってる関数の使い方を記憶に定着させるためにメモ。

#str_replace
特定の文字列を置換。

“`php
$zip = “123-4567”;
$zip = str_replace(“-“, “”, $zip);
echo $zip;

//123456
“`
郵便番号や電話番号などをDBに保存する際に”-”を除いた文字列で保存したい場合など。

私は悪い使い方として
古いプログラムを改修する際に誰が作ったか知らない俺俺関数で吐き出されたhtmlの一部だけ変更したい場合使ったりする。

“`php
function OreOreFunction(){
return “

俺俺俺俺だよ!

“;
}

$text = OreOreFunction();//俺俺関数
$change_text = str_replace(“だよ!”, “ですよ!”, $text);
echo $change_text;

//

俺俺俺俺ですよ!

“`

idをつけたい時などは

“`p

元記事を表示

Windows 10 のWSL2でDocker CEを使ってHello PHP

# 概要

Windows 10でWSL2環境を用意する。
WSL2環境でDocker CEを使用して、PHPの(開発用)動作環境を作る。

# 動機

近い将来にDocker Desktopが個人・中小企業を除いて有料化される[^1]ので、一応、代替策を検討しておく。

[^1]: Docker Desktopが有料化へ、ただし250人未満かつ年間売り上げ1000万ドル(約11億円)以下の組織や個人やオープンソースプロジェクトでは引き続き無料で利用可能( https://www.publickey1.jp/blog/21/docker_desktop250100011.html )(公式 https://www.docker.com/blog/updating-product-subscriptions/ )

– 下記の方法で正しくライセンス問題を回避できているかどうかは保証しません。
– 運営元の経営のためにも、支払える方は支払うことをお勧めします。

# 動作環境
– Windows 10
– WSL2環境

# 基本的なWSL操作

後述の手順で使うかもしれない。

###

元記事を表示

laravel ドット記法を使用して配列やオブジェクトから値を取得する

# 目的

– laravelのヘルパーメソッドである`date_get()`を使い、ドット記法で配列やオブジェクトから値を取得する方法をまとめる

# 方法

– 下記のように記載することで配列やオブジェクトから任意の値を取得する事ができる。

“`php
data_get(配列やオブジェクト, ドット記法での値の指定);
“`

# 参考文献

– [https://readouble.com/laravel/6.x/ja/helpers.html#method-data-get](https://readouble.com/laravel/6.x/ja/helpers.html#method-data-get)

元記事を表示

PHP if文でfalseと判定される値

# 目的

– PHPのif文でfalseと判定される値をまとめる

# if文の式でfalseと判定される値

1. 下記のPHP公式ドキュメントのif文の記載に下記のように記載されている。
– [https://www.php.net/manual/ja/control-structures.if.php](https://www.php.net/manual/ja/control-structures.if.php)
1. 「どのような値が false と評価されるかについては論理値への変換 を参照してください。」とあるのでリンク先を見てみる。
– [https://www.php.net/manual/ja/language.types.boolean.php#language.types.boolean.casting](https://www.php.net/manual/ja/language.types.boolean.php#language.types.boolean.casting)
1. ドキュメントによると下記の値がif文でfalseとして扱

元記事を表示

【PHP】Class名を変数に入れてインスタンス化or静的に呼び出す

## 概要
変数にClass名を入れて、別クラスでインスタンス化 or 静的に呼び出したい

– 共通で使用するクラス
– 適当なクラス
– 基底クラス(今回は登場しません)
– バリデーションクラス(今回は登場しませんが、staticなvalidate()という関数を持っています。)
の4つが前提として存在します。

## 詰まった時のコード
“`php
適当なクラス extends 共通クラス{
// 省略
// リポジトリのクラス名を返す
protected function getValidationClassName(): string
{
return ‘TestClassName’;
}
// 省略
}
“`

“`php
共通クラス extends 基底クラス{
// 省略
$validate_class_name = $this->getValidationClassName();
$error_validate = $validate_class_name::validate();
va

元記事を表示

php artisan make:authにて作成したビューがリダイレクトしてしまう。

### 経緯
僕が作ったアプリでは、管理者のみがユーザー登録できるように、ログイン
した人間のみが、画面遷移できるよう”カスタマイズ”したかった。

### 解決方法

新しく自分でコントローラーを作ってください!!

php artisan make:authを実行すると

下記のようなコントローラーが作成される。↓(これはほんの一部)

ConfirmPasswordController
ForgotPasswordController.php
LoginController.php

さらに下記のようなビューもが作成される。↓(これもほんの一部)

register.blade.php
login.blade.php

#### やりたかったこと
通常は、ログイン画面から、register.blade.phpに遷移するが。
ログイン→メイン画面→ボタン遷移でregister.blade.phpに繋げたかった。

#### やらかしたこと。。。

上記にあるLoginController.phpなど、php artisan make:auth
を使って、遷移させようとしたら、、

元記事を表示

npm run watchを実行したらエラーが出て、localhost:3000が立ち上がらなかった時の話

いつも、laravel+Vue.jsでSPAを作る時、プロジェクトのあるディレクトリに移動してから`$ php artisan serve`でlocalhost:8000を立ち上げ、ターミナルの別ウィンドウでプロジェクトのあるディレクトリに移動してから`$ npm run watch`をしてlocalhost:3000を開いて、書いたコードがどの様に反映されるか確認しながらやってた。

でも突然、なぜかエラーがいっぱい出て、localhost:3000がブラウザで開かなかった。

今回は、そんな時の解決法を備忘録として書いておこうと思います。

# エラーの詳細

入力後の出力結果はこちら。

“`terminal
$ npm run watch

Error: Missing binding /Users/saya/Documents/laravel_Vue_SPA/node_modules/node-sass/vendor/darwin-x64-72/binding.node
Node Sass could not find a binding for your current

元記事を表示

メールアドレスからサブドメインを抽出するには

PHPでさっくりできそうに思いますが、実はあまり簡単にいかない問題です。

順番に考えていきましょう。

1. ローカルパート分割の問題
2. ドメイン名分割の問題

## メールアドレスの仕様

メールアドレスの仕様については[RFC 5322 & 5321に沿ったメールアドレス(local-part)に使える文字まとめ – Qiita](https://qiita.com/yoshitake_1201/items/40268332cd23f67c504c)が詳しかったので参照してください。又聞きの情報ではなく[RFC 5322 – Internet Message Format 日本語訳](https://tex2e.github.io/rfc-translater/html/rfc5322.html)を読み込んでみるのも良いでしょう。

https://qiita.com/yoshitake_1201/items/40268332cd23f67c504c

メールアドレス検証のために使えるPHP組み込み機能は[`filter_var()`](https://www.php.n

元記事を表示

phpMyFAQの業務導入顛末記(その1)

**1.背景**

筆者の職場では、主にユーザーのサーバーやネットワーク環境の構築~保守・運用をやっています(筆者はやってないけど)。
作業は小規模ながらも多量の案件を効率よくさばく必要があり、特に顧客ごとの担当も決まっていないため、過去に各人が経験したノウハウやヒヤリハットをどう全員に共有するかが課題となっていました。

そういった情報共有を目的として、OSSなどフリーの「情報共有ツール」と称するツールを探している途中で見つけたのが、今回取り上げるOSSのphpMyFAQです。
https://www.phpmyfaq.de/

これがなかなかの「めっけもん」やったんで、以降そのインストールからデータ移行、業務への導入に関してその顛末をご紹介していきたいと思います(現在進行形)。

***
**2. phpMyFAQの特徴**

1) PHPを使った、フリーのオープンソースツールである:ある程度の調整や不具合は自分で対処
 最新版のver.3.0.9は、PHP7.2~で稼働します。
 もちろんソースも公開されていて、カスタマイズ可能です。
 https://www.p

元記事を表示

【4枚目】おっさんが入門CakePHP (動画第5回:Modelを使ってデータを表示)

今回はDB使って画面表示するらしい。
今回も動画に従って進めます。

XAMPPコンパネで各サービスを開始
![xampp_st.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/f0b2c05d-9e49-a6a3-89e9-ab611132bd58.png)

ブラウザでアパッチの動作確認。
※databaseの個所が赤いのでDB接続できていないということ。
![cake_st.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/d5975d06-1ef6-608f-ecd1-9c594bc2e6e4.png)

XAMPPコンパネでphpmyadminを起動
![x_mysql_admin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/3a56cb3d-390b-5661-225a-e30848ef8

元記事を表示

VSCode x DockerでXdebugを使えるようにする

# はじめに
この記事では、Visual Studio Code、Docker Desktop の導入方法は説明しません。
Xdebugのバージョンは2系と3系を使います。
# 環境

  • macOS Big Sur –version 11.3
  • Visual Studio Code –version 1.60.0
  • Docker Desktop –version 3.6.0

# Visual Studioで必要な拡張機能をインストール
felixfbecker.php-debug をインストールしてください
![スクリーンショット 2021-09-07 21.04.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479835/e61d43dc-dd55-d948-180d-20f22e2a4aa4.png)
# ディレクトリ構成
“`
.
├── .vscode
│   └── launch.json
├── Dockerf

元記事を表示

【Laravel】ルーティングの基本的な書き方

#はじめに

#ルーティングとは
「ユーザーがこのURLにアクセスしたらこの機能を呼び出す」というような感じで、URLと機能を紐付ける工程のことを言います。
Laravelでは、ユーザーからリクエストが送信されたら、ルーティングにしたがって決められたコントローラーのアクション(メソッド)が起動するという流れになります。
ルーティングは、routesディレクトリ内のweb.phpにRouteファサードを使って記述していきます。

#記述方法
(1)「/」にアクセスしたら、`views`の`welcome.blade.php`を表示する。

“`php:web.php
Route::get(‘/’, function () {
return view(‘welcome’);
});
“`

(2)「/menu」にアクセスしたら、`MenuController`のindexアクションを実行し、menusディレクトリ内の`index.blade.php`を表示する。

“`php:web.php
Route::get(‘/menu’, ‘MenuController@index’

元記事を表示

OTHERカテゴリの最新記事