PHP関連のことを調べてみた2020年05月12日

PHP関連のことを調べてみた2020年05月12日

【Laravel】フォームリクエストでバリデーションする

##`やりたいこと`##
– バリデーションする
– フォームリクエストを使い汎用性をあげる

##`前提`##
データベースは作成済み
モデルは作成済み
##`進め方`##
– フォームリクエストを作成する
– コントローラーを作成する
– viewを作成する
– ルートを設定する

フォームリクエストを作成する

コマンドプロンプトで作成するプロジェクトのディレクトリに移動してから

“`php
$ php artisan make:request TestRequest
“`
今回はTestRequestという名前のフォームリクエストクラスを作成。
※クラス名はキャメルケースにする。

“`php:TestRequest.php

元記事を表示

【意見募集】新発想?のフォームのセキュリティについて

Twitterのフォロワーさんと話していて、既にありそうだけど、もしかしたら使えるかもしれないフォームのセキュリティを見つけたので書いておきます。

例えば一般的なログインフォームはこんな感じですね?

“`php:index.php

EOM;
}else{
echo <<< EOM



元記事を表示

PHPで厳密な型チェック「declare」

## declareとは

declareとは、実行エンジンに対して、スクリプトの処理方法を指示するための仕組みです。

## 例

$priceに文字列を代入します。型宣言で引数・戻り値にintを指定しています。

“`php

$price = ‘100’; //文字列を代入

print calc_tax($price);

function calc_tax(int $price): int {
return $price * 0.08;
}
“`

結果は8が返ってきます。文字列が代入されているので、厳密にチェックしたい場合にdeclareを指定します。

“`php
declare(strict_types=1);

$price = ‘100’; //文字列を代入

print calc_tax($price);

function calc_tax(int $price): int {
return $price * 0.08;
}
“`

“Fatal error: Uncaught TypeError: Argument 1 passed to c

元記事を表示

Laravelで入力値エラーチェック(validate)を実装する

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# エラーチェッククラスの作成
(1) コマンドラインで
`cd sample`
`php artisan make:rule SampleRule`
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/app/Rules/SampleRule.phpが現れます

(2) /sample/app/Rules/SampleRule.phpに変数を追加し、コンストラクタ、passesメソッド、messageメソッドを修正します

“`SampleRule.php

元記事を表示

PHPで初めてのWebアプリケーション開発 Bladeで画面表示 備忘録5 

#前提
PHPを使ったWebアプリケーションの開発知識が必要になったので、開発過程の備忘録、知識のインプット・アウトプットを目的としている。

###環境
macOS Catalina 10.15.3
Laravel 7.10.3
PHP 7.3.11

#備忘録5 目次
HTML/CSSで作成した画面をBladeを使って表示
– Bladeを使ってテンプレートを作る
– コントローラーの作成
– 表示

#HTML/CSSで作成した画面をBlade構文を使って表示
###Bladeを使ってテンプレートを作る
Laravelには標準で独自のテンプレートエンジン「Blade」なるものが搭載されている。

Bladeに関して詳しく載っているサイト→[「Laravel 7.x Bladeテンプレート」](https://readouble.com/laravel/7.x/ja/blade.html)

今回はBladeの効率的にレイアウトを作成する機能を使って、テンプレートを作成する。
ディレクトリ resources/views/layouts/nanaita.blade.php

“`

元記事を表示

Composerをローカルに落とす方法

Composerを使いたいディレクトリに移動して以下を実行します。

“`
# binファイルを作成
mkdir bin

# composer-setup.phpをインストール
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a’) { echo ‘Installer verified’; } else { echo ‘Installer corrupt’; unlink(‘composer-setup.php’); } echo PHP_EOL;”

# binディレクトリの中に、composerファイルを作成
php composer-setup.php –install-d

元記事を表示

よく使うヘルパ関数まとめ

##ヘルパ関数とは
ヘルパ関数とは、PHPとは別でLaravelが用意している便利な関数たちです:blush:

##よく使うヘルパ関数
####1. dd()
PHPでいうvar dump()。
指定された変数の内容を表示し、スクリプトの実行を停止する。

“`php
dd($value);
“`

####2. auth()
ログイン情報の取得、チェックなどを行う。

– ログインユーザー情報取得

“`php
$login_user = auth()->user();
“`

– ログインチェック

“`php
if(auth()->check()) {
//ログインしました
}
“`

####3. env()
.envの中に書かれている文字列(環境変数)を取得する。

**例)**.envに“`DB_CONNECTION=mysql“`と書かれている場合

“`php
$env = env(‘DB_CONNECTION’);
dd($env);
//出力:’mysql’
“`

####4. config()
env()と似ていますが、configデ

元記事を表示

【PHP8.0】なんでもあり型が書けるようになる

ジェネリクスではない…ジェネリクスではないのだよ………

ざっくり言うと[var_dump()](https://www.php.net/manual/ja/function.var-dump)の型引数です。
var_dumpにはプリミティブ値にオブジェクトにリソース型にと、どんな値でも渡すことができるのですが、PHP7.4時点の型システムではvar_dumpの引数の型を表すことができません。
PHP8.0で導入予定の[union型](https://qiita.com/rana_kualu/items/f75e254553157d8eb0b7)を使うと`array|bool|callable|int|float|null|object|resource|string`となるのですが、実は`resource`型はPHP8.0でもまだ使えないので、`mixed`型を完全に再現することはできません。

ということで[Mixed Type v2](https://wiki.php.net/rfc/mixed_type_v2)のRFCが提出されました。
投票は2020/05/21まで、受理には

元記事を表示

【2020年度版】EC-CUBE の開発環境の作り方

[ビルトインウェブサーバーで簡単環境構築](https://qiita.com/nanasess/items/c835e87c0e720c4e391f) や、 [EC-CUBE の開発環境の作り方](https://qiita.com/nanasess/items/7170ab22e81e2e8e7edd)の2020年度版です。

最近、 **[symfony/cli](https://symfony.com/download)** が超絶使えるようになっているのでご紹介したいと思います。

– *一部制約がありますが、 WordPress や Symfony を使用していない EC-CUBE2系でも利用可能です*
– *Symfony3系、4系では `Symfony/WebServer-bundle` で開発用ローカルウェブサーバーを起動していましたが、 Symfony5系では廃止されました*

## symfony/cli とは

– Symfonyプロジェクトを新しく作成したり
– パワフルな開発用ローカルウェブサーバーが利用できたり
– セキュリティチェックができたり

する便

元記事を表示

PHPでWEBサイトの変更を検知してLINEに通知する

先日、Qiitaを物色していたらこんな記事を見つけました。

[【自動化】WEBサイトの変更を検知してLINEに通知する](https://qiita.com/Potewo/items/431cea6b954652adb0b3)

やってみよー。と思いましたが、残念、Pythonにそこまで詳しくないという事実が発覚しました。

ってことで、PHPでやっていきます。

### 0, 前準備

取り合えず、VPSは借りてました。
さて、利用規約はどうかな~。ところがどっこい、弊学のHPには利用規約もプライバシーポリシーもないという。。。

### 1, 簡単に処理の流れを考えていく

crontabで定期的にPHPの処理を実行して変化があればLINEに通知していく。

という極めてシンプルな方法をとりたいと思います。

### 2, コードを書いていく

まず、HPのコードがどのようになっているか見ていかなければなりません。

HPのうち、取得したい部分を抜粋します。

“`HTML

記事一覧

なぜ全て関数ではなく、クラスを使うといいのか?の検証 PHP使用

#なぜ全て関数ではなく、クラスを使うといいのか?の検証 PHP使用
※初投稿です。
※リスクヘッジとして備忘録風を装っています。(自信がない主張をするときにするやつ)
※新米ですので用語の誤認識、説明の間違いなどあります。

ご指導のほどお願いします。

##経緯
この記事はPHPで簡単な登録機能を含んだページを作っている時に浮かんだ疑問がもとになっています。
DBへの接続や住所を都道府県名にちぎる工程をfunctionをつくって行っていました。

そんな時、ふと「PHPってクラス化って概念あるけど、function内に収めて全部関数化してしまえばクラスっていらないんじゃないの?」と頭に浮かびました。
パパっと調べてみると「全てを関数にするとコードが大量になった時に覚えるのが大変」という主張を見かけたのですが、「いや、そんなこと言ったらクラスつくるのだって一緒だわ!」となんでやねんをかましました。

それ以外にもクラス化した方がいい理由を見つけたのですが、どれもこれも眺めてるだけでは腹落ちせず…
クラス化による「`カプセル化`、`継承`、`多様化`」というメリットは知ってはいたのですが

元記事を表示

UbuntuでPHPをインストールできない

## やりたいこと
デフォルトでインストールされているPHPが7.0なので、7.4に上げたい

“`
$ php -v
The program ‘php’ can be found in the following packages:
* php7.0-cli
* hhvm
Ask your administrator to install one of them
“`

## 事象
PHPのパッケージがaptのリストにないためアップデートできない

“`
$ sudo apt -y install php7.4
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package php7.4
E: Couldn’t find any package by glob ‘php7.4’
E: Couldn’t find any package by regex ‘php7.4’
“`

## 解決方法
add-a

元記事を表示

PHPファイルにCSSを読み込ませる

#はじめに
こちらでは問合せもあった事から、phpファイルにcssを読み込ませるやり方を説明できればと思います。
またHTMLとCSSを触られたことがあることを前提で進めさせていただきます。

#環境
CentOS
PHP 7.3.17
Apache
chrome

#やり方
みなさんHTMLとCSSを触られたことはあるとあるとおもいます。
今回は簡単にphpでecho表示させたものを色をつけただけのシンプルなものです。
やり方としてはhtml同様に読み込ませるだけです。

“`php:test.php “;
echo “赤色”;
echo “

“;
?>
“`

“`css:style.css
.red{
color:red;
}
“`
#まとめ
いかがだったでしょうかphpだからといって難しく考えることはないことがわかるとおもいます。

元記事を表示

Laravelで前処理、後処理を実装する

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# 前処理、後処理をつくる
Laravelで前処理、後処理を行うにはMiddlewareを作成します

$nextの前に書く処理が前処理となります

$nextの後に書く処理が後処理となります

(1) /sample/app/Http/Middleware/GlobalSample.php作成

“`GlobalSample.php

元記事を表示

PHP Laravel 復習

#前提
人の脳は2日で73%忘れると聞いたため学んだことを復習していきます。

#本題

“`PostController.php
return view(‘posts.index’, [‘posts’ => $posts]);
“`
viewメソッドの第一引数には、ビューファイル名を渡す。

‘posts.index’とすることで、resources/views/postsディレクトリにある、indexという名前のビューファイルが表示される。

viewメソッドの第二引数には、ビューファイルに渡す変数の名称と、その変数の値を連想配列形式で指定。

ここで、’posts’というキーを定義することで、ビューファイル側で$postsという変数が使用できるようになる。

また、Laravelでは、それ以外のコードの書き方でも変数をビューに渡すことが可能。

1、withメソッド

“`PostController.php
return view(‘posts.index’)->with([‘posts’ => $posts]);
“`
viewメソッドにwithメソッドを繋げて、wi

元記事を表示

php:7.3-fpm-alpineで、モジュールのインストール

# phpのモジュールのインストール
composerを実行したときに、socketsがないとのエラーが発生しました。
エラー解決の道のりで学んだことを共有します。
## 筆者の使用している環境
・docker
・php:7.3-fpm-alpine
## error内容
“`
composer require linecorp/line-bot-sdk
“`
のコマンド実行時にエラーが発生しました。

“`
/work # composer require linecorp/line-bot-sdk
1/3: https://packagist.jp/p/provider-2020-04$0debce5054869c0cc3060fd8316edffa3035f0642bf192c9e9cf9724d7429a24.json
2/3: https://packagist.jp/p/provider-latest$a6fa0af3f924c039609f8f1f06ac662b10318aa68e1148be6b1bdb31361c8

元記事を表示

SymfonyでDQLを拡張してMysqlの関数を使えるようにする

# 概要
Symfony + EC-CUBEでDQLを拡張する方法を学んだのでまとめました。

# 動作確認環境
“`
EC-CUBE 4.0.3
Symfony 3.4.26
PHP 7.3
MySQL 5.7
“`

# DQLの拡張方法
## DoctrineExtensionsライブラリを導入する
今回は、キーワードで検索時に照合順序を指定して検索することが課題でした。
なので、MysqlのCOLLATEが利用できればよかったのでDoctrineExtensionsライブラリを利用しました。他にもライブラリが存在するでしょうが、用途や実現したいことによって使い分ければよいと思います。

“`
composer require beberlei/doctrineextensions
“`

使いたい関数があるかどうかは、githubを参照してください。
[DoctrineExtensions](https://github.com/beberlei/DoctrineExtensions)

## EntityManagerに利用したいMySQLの関数を設定する
クエリを生

元記事を表示

Raspbianにaptでnginx+PHP7.3を導入

# 導入経緯
Raspberry Pi4を購入してWebサーバーを構築します。
Apacheのほうが慣れているのですが、nginxに乗り換えたいと思ったので実行してみました。

# nginxのインストール
最近はapt-getよりaptを使うことが多いですので、説明もaptで統一します。

まずは、「nginx」のインストールコマンド
`$ sudo apt install nginx`

「nginx」の起動
`$ sudo systemctl start nginx`

nginxが起動したら、ブラウザからRaspberry PiのIPアドレスにアクセスするか、Raspberry Piのブラウザからlocalhostにアクセスしてnginxの初期ページが閲覧できることを確認しましょう。

# PHP7.3のインストール
PHPは今回「7.3」を使います。
「php7.3」のインストールコマンド
`$ sudo apt install php7.3 php7.3-fpm php7.3-mbstring php7.3-gd php7.3-xml`
※WordPressとか使うことをが

元記事を表示

PHPの例で学ぶインターフェイスって何?

現場でPHPのコードを見る中で、インターフェイスが実装されているケースがあるのですが、初心者に毛が生えたレベルのエンジニアの私には、よく分かっていないので、まとめてみました。

まずは公式よりの引用↓

0.公式よりの引用
>
>オブジェクトインターフェイスにより、あるクラスが実装する必要があるメソッドの 種類を、これらのメソッドの実装を定義することなく、指定するコードを作成できる ようになります。
>
インターフェイスは通常のクラスと同様に定義することができますが、 キーワード class のかわりに interface を用います。またメソッドの実装は全く定義されません。
>
インターフェイス内で宣言される全てのメソッドはpublicである必要があります。 これは、インターフェイスの特性によります。
>
コンストラクタ をインターフェイスで宣言できることに注意して下さい。 これはたとえばファクトリで使う場合など、コンテクストによっては役に立ちます。
>

[公式より引用] (https://www.php.net/manual/ja/language.oop5.interfac

元記事を表示

LaravelでJSONを返す(Ajax)

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpにjson1メソッド、json2メソッドを追記

“`
public function json1(Request $request)
{
return view(‘sample.json’);
}

public function json2(Request $request)
{
$data = [
‘a’ => $request->input(‘a’),

元記事を表示

OTHERカテゴリの最新記事