- 1. Laravel date型カラムの取り扱いに注意
- 2. 【laravel】Auth::loginでログインできたと思ったらできていなかった問題
- 3. ほけん相談SNS『ほけんとーく』を作ってみた
- 4. 結構使うけどすぐ忘れる関数の使い方
- 5. Windows 10 のWSL2でDocker CEを使ってHello PHP
- 6. laravel ドット記法を使用して配列やオブジェクトから値を取得する
- 7. PHP if文でfalseと判定される値
- 8. 【PHP】Class名を変数に入れてインスタンス化or静的に呼び出す
- 9. php artisan make:authにて作成したビューがリダイレクトしてしまう。
- 10. npm run watchを実行したらエラーが出て、localhost:3000が立ち上がらなかった時の話
- 11. メールアドレスからサブドメインを抽出するには
- 12. phpMyFAQの業務導入顛末記(その1)
- 13. 【4枚目】おっさんが入門CakePHP (動画第5回:Modelを使ってデータを表示)
- 14. VSCode x DockerでXdebugを使えるようにする
- 15. 【Laravel】ルーティングの基本的な書き方
- 16. ☆herokuでのしょうもない凡ミス、、☆エンコードを直しても直しても変わらない
- 17. Amazon Linux 2 に複数PHPバージョンを同居
- 18. PHPでメールアドレスからサブドメインを除いた形のドメインを抜き出す
- 19. composerプライベート自作ライブラリをgitlabに作成する
- 20. php version 違いでエラーになる
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 watchError: 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’
☆herokuでのしょうもない凡ミス、、☆エンコードを直しても直しても変わらない
##状態
①herokuへDBをプッシュできなかった。
②原因がわかっていて、エンコードのバイト数が基準を超えてしまっている。
③エンコードのバイト数を増やす記述を増やす記述を追記する
④なぜか変わらない、、
⑤どうやらherokuでプッシュするときは、ローカルでもプッシュしないといけないという凡ミス、、“`php:ターミナル
$ heroku run php artisan migrate
“`###②原因がわかっていて、エンコードのバイト数が基準を超えてしまっている
“`php:ターミナル
SQLSTATE[42000]: Syntax error or access violation: 1071
Specified key was too long; max key length is 767 bytes
“`###③エンコードのバイト数を増やす記述を増やす記述を追記する
“`
記述①
php:/app/Providers/AppServiceProvider.php
…
記述②
use Illuminate\Support\Facade
Amazon Linux 2 に複数PHPバージョンを同居
## Amazon Linux 2 に複数のPHPバージョンを同居
PHPインストール時に複数バージョンを同居しても問題ないよう、インストールしてる手順をメモ
:::note warn
汎用的なやり方ではないと思いますが、簡単に設定・切替えしたい人向けです。
:::① yum updateした後に、remiリポジトリを追加
“`sh
# 最新版へupdate
sudo yum -y update
# remiリポジトリを追加
sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
“`② 利用するPHPバージョン毎にインストール
“`sh
# PHPを使うバージョン毎にインストール
for v in 70 74 80; do sudo yum -y install php$v php$v-ph
PHPでメールアドレスからサブドメインを除いた形のドメインを抜き出す
以下のコードを利用することで、サブドメインを除いた形で、メールアドレスからドメインを抜き出すことができます。
※ブランドTLDは処理出来ません(ブランドTLDは別途処理方法を検討する必要があります)
“`php
composerプライベート自作ライブラリをgitlabに作成する
# 概要
自作ライブラリをcomposer/gitlabを介して使う# 手順
## トークンの作成
アクセス用トークンを作成する。https://${gitlab_url}/profile/personal_access_tokens
にアクセスし、Scopeをapiで作成。
値をメモしておく。## ライブラリ用プロジェクト
### projectの設定
gitlabプロジェクトのページで、Setting>General>Visibility, project features, permissionsにアクセス。
パッケージとして使うことを許可する。### composer.json
以下の記載を入れる
“`json
{
“name”: “${namespace}/${library-name}”,
“type”: “library”,
“version”: “${version}”
}
“`この状態で、タグをつけてプッシュしてする。
### ライブラリの発行
以下のコマンドをたたきライブラリとして登録する。“`bash
curl –
php version 違いでエラーになる
Fatal error: Uncaught Error: Call to undefined function mysql_connect()
![スクリーンショット 2021-09-07 8.53.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645197/c89d8564-0a4a-fed0-0c0f-b24c7df10d54.png)
バージョンが違うと出る
ネットで検索すると
バージョンによって書き方が変わると書いてあったphp version 7に書き換えるには、
$conn = mysql_connect($sv,$user,$pass) or die(“接続エラー”);
空
$conn = mysqli_connect($sv,$user,$pass) or die(“接続エラー”);
mysql_connect ——> mysqli_connect というふうにiをmysqlの
後につけることで解決することができる
そうすればエディタで表示さ