- 1. PHP8にstr_contains関数が追加されることになったというお話
- 2. 【Laravel】MassAssignmentExceptionへの処方箋
- 3. PHPUnitの「phpunit.xml.dist」って何?
- 4. Ubuntu18.04にWordPressのローカル環境をつくる
- 5. 【Laravel+React】ページルーティング
- 6. 【Laravel+React】Herokuプッシュ時のつまずき
- 7. openshift4.3でlaravelする
- 8. concrete5 (version 8)を CentOS8の環境に構築する 番外編(トラブル対応)
- 9. 製薬企業研究者のためのMySQLインストール方法
- 10. 【Laravel】バリデーション独自ルールの作成方法
- 11. Advanced Custom Fields PRO (ACF)のカスタムフィールドヘッダータイトルにある歯車マークを消す方法
- 12. PHPで2つの日付の差を求める
- 13. LaravelのRedisで存在しないキーを取得しようとするとnullが返ってくるお話
- 14. 【PHP+MySQL】データベースに格納した画像データを表示する方法(base64エンコード)
- 15. Laravel - 『ドメイン駆動設計入門』を読んで Laravel を使って実装してみた
- 16. LaravelのRequestクラス(入力の取得)
- 17. Docker-composeで以前に作られたPHP環境をbuildしようとしたらエラーがでたのでメモ
- 18. 今からエンジニアを目指すにはRubyよりPHPがおすすめ
- 19. FuelPHPを使ってみる
- 20. Laravel 6系でAmazon SESからメールを送信するときの設定方法
PHP8にstr_contains関数が追加されることになったというお話
`strpos` や `strstr` を使わずに済むようになる・・・かもしれません( **日本語対応にやや懸念あり** )。
以下、 [RFC](https://wiki.php.net/rfc/str_contains) をもとに紹介します。
まだ投票中ですが、3月8日現在、賛成42/反対5という圧倒的多数の支持を得ているため、追加される公算が高いです。
# 既存関数の問題点
ある文字列が別の文字列に含まれているかをチェックする際、これまで [strpos](http://php.net/manual/ja/function.strpos.php) や [strstr](http://php.net/manual/ja/function.strstr.php) といった関数が使われてきました。しかし、これらの関数は、以下の問題を抱えています。
– 読み手にとってあまり直感的でない
– 間違いやすい
– 新しく PHP に触れる開発者にとって覚えにくいそのため、多くの PHP フレームワークが、同様の振る舞いをするヘルパー関数を提供しています。それだけ、この機能は、重
【Laravel】MassAssignmentExceptionへの処方箋
#はじめに
MassAssignmentExceptionは新しくModelクラスを作成して、複数代入してデータをDBに保存しようとすると起こるエラーです。Laravel初心者の時はモデルを作成し時は必ず起きていました。。。##複数代入時の問題点
複数代入でDBに保存するメソッドは`create`があります。
createメソッドを使う時は下記のようなコードになるかと思います。“`php:
$user =User::create($request->all());
“`これではフォームからの入力値を完全に信じて保存処理を行いますので、
入力フォームにない項目でもDBに該当する属性があれば保存されてしまいます。だからLaravelでは「新しく作成したModelクラスから複数代入で属性(カラム)を保存しようとしていますが、その属性(カラム)を保存していいのかわかりません」というエラーを出るようになっています。
##どうすればいいか
上記のことから、やらなければならないことは「保存していい属性(カラム)のリスト(ホワイトリスト)か保存してはいけない属性(カラム)のリ
PHPUnitの「phpunit.xml.dist」って何?
PHPUnitの設定ファイルはXML形式で、通常 `phpunit.xml` または `phpunit.xml.dist` という名前が使われる。
**でもこの `.dist` って何?**
調べたら作者のバーグマンさんが質問に答えてた。
https://stackoverflow.com/a/44764078
> If phpunit.xml or phpunit.xml.dist (in that order) exist in the current working directory and –configuration is not used, the configuration will be automatically read from that file.
>
> The idea behind the fallback (to phpunit.xml.dist when phpunit.xml does not exist) is that phpunit.xml.dist can be checked into version control and
Ubuntu18.04にWordPressのローカル環境をつくる
WordPressを触ってみたかったので、ローカルの環境をつくったときのメモ
## 動作環境
Ubuntu18.04
## 今回すること
ホームページを公開するのではなく、ローカルでの環境を整えます。(ホームページを公開するにはサーバー契約とかドメイン取得とかが必要)
phpとかMariaDBとかもついでにインストールします。
ゴールは下のようなWordPressの管理画面になることです。![Screenshot from 2020-03-07 23-36-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517356/cd0984fa-02d3-3240-b8e6-266dd9c6b6ad.png)## WordPressとは
ググってみたらたくさん出てくると思います。
>WordPressは、オープンソースのブログソフトウェアである。PHPで開発されており、データベース管理システムとしてMySQLを利用している。単なるブログではなくコンテンツ管理システム としてもしばしば利用されている。-
【Laravel+React】ページルーティング
#困ったこと
今回サービスを開発する上でLaravelでのルーティングをするのかReactでのルーティングをするのか迷い,元から実装していたReactでの実装にした.
その時単純なreact-router-domの記述ではLaravelとの連携ができない#解決
web.phpのルーティング記述を以下のように変更して連携させる.“`php:routes/web.php
Route::get(‘/{path?}’, function(){
return view(‘welcome’);
} )->where(‘path’,’.*’);
“`
welcome.blade.phpには従来のReactと同じようにRenderするためのルートIDを設ける.あとapp.jsを読み込む.(こいつがWebpack的にcssとかjsとか集約するっぽい)“`html:resources/views/welcome.blade.php
【Laravel+React】Herokuプッシュ時のつまずき
#初期環境
Laravelアプリの作成```
composer create-project laravel/laravel アプリ名
```
git push```
git push heroku master
```#つまずき①
```
heroku open
```
するとトップページがForbidden.####解決法
```:Procfile
web: vendor/bin/heroku-php-apache2 public
```
を作成.これでサイトアクセスエントリページがpublicフォルダに設定される.#つまずき①
```
heroku open
```
するとトップページが500 server error.####解決法
```:ターミナル
heroku run "php artisan key:generate --show" --app=アプリ名
```
ここに出てくる値をHerokuのSettingタブ内下画像のAPP_KEYに設定.
openshift4.3でlaravelする# はじめに
openshift3.11を利用中でしたが、openshift4.3に触れてみようと始めたminishiftのインストール。
名前も変わってCODEREADY CONTAINERS 1.6。そして、あまりのGUIの変化についていけないところですが、これから頑張りたいと思います(笑)まずは在り来たりのlaravelをopenshift4.3で起動するところまでやってみたいと思います。
# CODEREADY CONTAINERS 1.6のインストール
新規にインストールする際はこちらを参考にどうぞ。
[CentOS7にOpenShift4(Red Hat CodeReady Containers)をインストールする](https://qiita.com/imp555sti/items/b471dc4410ad732c5f1d)アップデートするならこちらからどうぞ。
[CentOS7にOpenShift4を4.2から4.3にUpdateする](https://qiita.com/imp555sti/items/bfc4580e2a9322eca611)# C
concrete5 (version 8)を CentOS8の環境に構築する 番外編(トラブル対応)
# 概要
ここでは、concrete5の実際のインストール作業を行なっていきます。
事前準備として、CentOSやNginx,PHP,MySQLなどの環境が構築済みであることが必要です。ここでの手順は、以下の手順の通り環境構築が完了していることを前提とします。
[concrete5 (version 8)を CentOS8の環境に構築する①](https://qiita.com/You_name_is_YU/items/60042468ae89a750b8b5)また、インストールはComposerを利用しようと思います。
# 環境情報
- Vagrant 2.2.7
- VirtualBox 6.1
- CentOS 8.1
- Nginx 1.17.8
- PHP 7.4.3
- MySQL 8.0.17
- Composer 1.9.3# Composerをインストール
```shell-session
# dnf -y install wget
# cd /usr/local/src
# wget https://getcomposer.org/install
製薬企業研究者のためのMySQLインストール方法
# はじめに
ここでは、MAMPのインストールによってMySQL環境を構築する方法を解説します。
# MAMPのインストール
[MAMPのダウンロードページ](https://www.mamp.info/en/windows/)にアクセスします。
「Free Download」をクリックしてインストーラーをダウンロードします。![MAMP_download.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517951/edb4829d-b4d4-544c-b0a3-1e1a1213e256.png)
インストーラーを立ち上げ、画面の指示通りに進んでいけばインストールできます。
# MAMPの起動
サーバーを起動するには、MAMPをダブルクリックして立ち上がるウィンドウで、「Start Servers」をクリックします。
![MAMP_start.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517951
【Laravel】バリデーション独自ルールの作成方法
Laravelでバリデーション独自ルールを作成することがあったため備忘録。
# Ruleクラスを継承したクラスを作成する
App\Rules配下にルールのクラスを作成します。
下記のコマンドを実行
```
php artisan make:rule {ルール名}
```例)
```
php artisan make:rule Phone
```実行すると下記のようなファイルが作成されます。
```Phone.php
Advanced Custom Fields PRO (ACF)のカスタムフィールドヘッダータイトルにある歯車マークを消す方法
ACFのPROだけの機能?なのか、カスタムフィールドを設置した際にヘッダータイトル部分に歯車アイコンが現れて直接カスタムフィールド編集にアクセスできるのだが、クライアントに納品する際に色々と具合が悪い。勝手にいじられたりとか。
この編集画面へ直リンクされている歯車アイコンを消す方法。
下記のソースをfunctions.phpに書くだけ。動作確認Ver:ACF PRO 5.8.8
```
function pands_admin_colors() {
echo '';
}add_action('admin_head', 'pands_admin_colors');
```管理画面の場合admin_headでフックさせればOK。
特定のページにのみ反映させたい場合はhook_suffixで判定してやれ
PHPで2つの日付の差を求める
2つの日付の差分を求めたい。普通はCarbonやDateTimeを使いますが、古いプロダクトなので、簡易な手続き型関数で済ませたい。
https://www.google.com/search?q=php+%E7%B5%8C%E9%81%8E%E6%97%A5%E6%95%B0
いろんな方法がありますが、タイムスタンプに換算して86400(60x60x24)で割る方法は使えません。たとえば「3月7日の19時に開催して翌日の正午に終わるイベント」を `3月7日・3月8日` の「2日」に渡って開催されるものとして扱いたくても、86400秒で割る方法だと24時間に満たないため「1日」として判定されるからです。```
function days_interval($date1, $date2) {
return date_diff(
date_time_set(date_create($date1), 0, 0)
, date_time_set(date_create($date2), 0, 0)
);
}
```上記のような感じでどう
LaravelのRedisで存在しないキーを取得しようとするとnullが返ってくるお話
`false` が返ってきたり `null` が返ってきたりする楽しい世界です。
# 前提
## 動作環境
- Laradock
- Laravel 6.12
- Redis 5.0.3
- phpredis 5.1.1## DBの中身
Redis の中には `key1` のみが入っているとします。```
127.0.0.1:6379> SET key1 value1
OK
127.0.0.1:6379> KEYS *
1) "key1"
```# 要約
## Redis
Redis で存在しないキーを指定すると、 `nil` が返ってきます。```
127.0.0.1:6379> GET key1
"value1"
127.0.0.1:6379> GET key2
(nil)
```## PhpRedis
[PhpRedis](https://github.com/phpredis/phpredis) では、boolean 型の `false` が返ってきます。```php
$redis = new Redis();
$redis->connec
【PHP+MySQL】データベースに格納した画像データを表示する方法(base64エンコード)
####1.DBに格納した画像を表示したい。
特定のフォルダに入っている画像の表示ではなく、DBに格納した画像(バイナリデータ)
を表示する方法を知りたい。
そんな場合に使える方法を調べてみた。一般的にある下記方法を実行すると、真っ黒い画面しか出てこない。
```php
```
解決方法は4へ。####2.恐竜の画像を格納するテーブルの作成
画像はmediumblob型として保存
```
create table tbl_dinoimg (
id integer,
img mediumblob,
ext varchar(10),
primary key(id)
);
```####3.実際のデータが格納されているテーブル
![dino_image1_pre.jpg](https://qiita
Laravel - 『ドメイン駆動設計入門』を読んで Laravel を使って実装してみた
## 要約 / inb4 tl;dr
- 成瀬允宣さん([Twitter](https://twitter.com/nrslib) , [nrslib](https://nrslib.com/) )の 『[ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本](https://amzn.to/2VFuaNm)』 を読んでサンプルコードを Laravel で実装してみた。
- DDD 入門として、とても良い書籍だったのでオススメ。
- 実装の前提条件やポイントをまとめた。
- ※注:この記事は、あくまでサンプルコードの書き起こしと整理のみです。DDD 本来の設計作業についての記載はほとんどありません。
- コードはこちら
- [anfangd/laravel-ddd-sample-for-beginners - GitHub](https://github.com/anfangd/laravel-ddd-sample-for-beginners)## はじめに
2020年2月9-11日に開催された PHPerKaigi2020 に参加してきました。
[![
LaravelのRequestクラス(入力の取得)
Requestクラスの入力値の取得に関するメソッドのメモです。
基本的には公式リファレンスの内容を書いているだけですので、詳しくはそちらをご覧ください。
https://readouble.com/laravel/5.8/ja/requests.html###all()
すべての入力値を連想配列で取得できる。クエリストリング、アップロードファイルも取得する。```php
$input = $request->all();
```###input()
添付ファイルを除く、すべての入力値を連想配列で取得。フォーム上のフィールド名を引数にとり、限定して取得できる。
```php
$name = $request->input('name')
```###query()
入力をクエリストリングで取得。input()と同じく引数も渡せる。```php
$name = $request->query('name');
```###動的プロパティによる取得
```php
$name = $request->name;
```
アップロードファイルも取得可能。
Docker-composeで以前に作られたPHP環境をbuildしようとしたらエラーがでたのでメモ
#起きたエラー
普通に`docker-compose build`して
ずらーーーーーーっと処理してくれてうまくいたかなあと思ったら
こんなエラーがでました。```terminal.
echo 'sendmail_path = "/usr/sbin/ssmtp -t"'
php -r 'copy('"'"'https://getcomposer.org/installer'"'"', '"'"'composer-setup.php'"'"');'
php -r 'if (hash_file('"'"'sha384'"'"', '"'"'composer-setup.php'"'"') === '"'"'48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5'"'"') { echo '"'"'Installer verified'"'"'; } else { echo '"'"'Installer corrupt'"'"'; unlink('"
今からエンジニアを目指すにはRubyよりPHPがおすすめ
#はじめに
私自身WEBエンジニアを目指してRuby/Ruby on Railsを勉強していました。しかし今からWEBアプリ開発エンジニアを目指すのであれば、PHPの方がおすすめです。今回はなぜRubyよりPHPの方がおすすめなのか理由を書きたいと思います。#そもそもRuby/PHPとは?
Ruby
Ruby(ルビー)は、まつもとゆきひろ(通称: Matz)により開発されたオブジェクト指向スクリプト言語。開発者のまつもとゆきひろは、「Rubyの言語仕様策定において最も重視しているのはストレスなくプログラミングを楽しむことである (enjoy programming)」と述べている。
ただ個人的な話かもしれないがRubyを学ぶ場合、Ruby on Rails(実アプリケーションの開発の雛形を予め備えた仕組み=フレームワーク)を学ぶ必要があり、そのフレームワークが初心者には流れが理解しづらいと思う。あくまで楽しめるのは「プログラミング経験のある開発者/エンジニア」であり、初学者は楽しめる領域まで勉強する必要がある。PHP
名称の PHP は再帰的頭字語として、 "PHP: Hype
FuelPHPを使ってみる
公式ドキュメント:
http://fuelphp.jp/# PHPバージョン
1.8.0ではPHP7.2までサポート、1.8.2ではPHP7.3までhttps://bmf-tech.com/posts/FuelPHP1.8.0%E2%86%921.8.2%E3%80%81PHP5.6%E2%86%92PHP7.3%E3%81%B8%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%9F
公式:https://fuelphp.com/blogs/2019/06/fuel-releases-1-8-2
1.8.2のchangelog:https://github.com/fuel/core/wiki/Changelog-v1.8.2# docker環境の構築
下記を利用させていただきました。
https://github.com/nemui-fujiu/docker_fuelphp## 修正箇所
PHPのDockerfile内
Laravel 6系でAmazon SESからメールを送信するときの設定方法
# はじめに
Laravelにて、Amazon SES経由でメールを送信するための設定をまとめました# 環境
- PHP 7.3
- Laravel Framework 6.13.1# 前提
Amazon SESの設定、IAMの設定は完了しているものとします# 設定の流れ
1. AWS sdkをインストールします
2. .envファイルにIMAのアクセスキーID、シークレットアクセスキー、リージョンの設定を追記します
3. キャッシュをクリアします# 設定してみた
## 1. AWS sdkをインストールします
```bash
$ composer require aws/aws-sdk-php
```## 2. .envファイルにIMAのアクセスキーID、シークレットアクセスキー、リージョンの設定を追記します
```.env
MAIL_DRIVER=ses
MAIL_FROM_ADDRESS=hoge@example.comAWS_ACCESS_KEY_ID=【IAMのアクセスキーID】
AWS_SECRET_ACCESS_KEY=【IAMのシークレットアク