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

PHP関連のことを調べてみた2021年05月31日
目次

Laravel eloquentのtoArrayのソースを読む(goのdatabase/sqlと比較してみる)

# Laravelのeloquentに悩まされる

業務でLaravelを触っています。
個人では最近はGoやNextjs(Typescript)、少し前まではDjangoをよく触っていました。
LaravelはDjangoと比べてもコードの自動生成が圧倒的に充実しており便利である反面、型がゆるゆる過ぎて変なところでつまづき時折腹が立ちます。あと、フレームワークとして大きすぎるかななんて思ったりもしてます。

Laravel歴3ヶ月弱の自分がeloquentを使ってDBからデータを引っ張ってきてtoArrayした際に予期せぬ型で返すことがありました。
**なんだコイツ**と思いつつ謎を放置したままいるのも嫌だったのでソースコードを見てみようと思いました。

ということでEloquentのtoArrayのソースコードを読み解いていこうと思います。

### toArrayの定義はこちらです
https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L1345

“`php
/**
* C

元記事を表示

S3 + Laravel + herokuで画像アップロードまとめ【忙しい人のため用】

LaravelとherokuでのS3を用いた画像アップロード記事はいくつか転がっているので、こちらの記事では要点だけを抑え、なるべく短時間でデプロイできるよう見やすく仕上げたつもりです。
そのため、S3に対する理解がとぼしくなる恐れがございます。(S3については少し調べてくるといいかもです。)
エラー解決も含め、みなさんの何かの参考になれば幸いです。

【設定環境】
M1 mac OS Big Sur 11.2.2
Composer 2.0.13
Laravel 5.8
PHP 7.2

画像アップロード&表示までの流れ(目次)

① S3の設定

② AWS SDK for PHP のインストール

③ ファイル操作用パッケージのインストール

④ Herokuの環境変数を設定

⑤ コントローラー(保存),ビュー(送信と表示)

⑥ S3のアクセス権限の許可

① S3の設定

AWSのアカウント作成

→ [AWSアカウント作成の流れ](https://aws.amazon.com/jp/registe

元記事を表示

Laravelを調べる:初めてのmigrate編

# Laravelを調べる:初めてのmigrate編

編集中です!!

## モデルの確認

[Laravelを調べる:Docker起動編](https://qiita.com/takeohman/items/2233a3d7f7a627cb8ed5) での展開直後、Models/User.phpがすでに存在していた。

私は慌ててmigrate(後述)してしまい、フィールドを追加し忘れてしまったので、ここは一旦落ち着いて見直すのがよいと思う。

“`
app

├── Models
│ └── User.php

“`

“`
% tree database
database
├── factories
│ └── UserFactory.php
├── migrations
│ ├── 2014_10_12_000000_create_users_table.php <============これー │ ├── 2014_10_12_100000_create_password_resets_table.php │ └── 2019_08_

元記事を表示

【Laravel】【jQuery】未経験から入社して約一年経ったので、1か月間でちょっとしたWEBアプリケーションを作ってみた

#はじめに
当記事を開いていただきありがとうございます。
タイトルの通り、未経験から新卒社員として開発事業部に入社して約一年が経ちました。そこで、学んだことを活かして、一か月間でLaravel、JQueryを用いたちょっとしたWEbアプリアプリケーションを作ってみました。当記事は作ったアプリケーションの紹介と感想をまとめたものです。

#投稿者の情報
・2020年4月に未経験から新卒社員として開発事業部に入社
・入社後は主にサーバー側の実装を担当
・Laravel,jQueryは案件では少ししか触ったことがない
・2020年10月、AWSアソシエイトの資格を取得し、以降2件ほどインフラ構築にチャレンジさせてもらった

#公開中のテスト環境
https://view-saurus.com/
!注意!
最低限の機能のみのテスト環境です。予期せぬ不具合が発生する場合があります。予めご了承ください。
テスト環境の出力は一回のみ可能です。
テスト環境についてのご指摘、ご質問を当記事にコメントすることはお控えください。
zipでの出力のため、chromeの場合は出力時に警告が出る場合があります。

元記事を表示

Laravel6でテストコードを書いてみよう

Laravelでは、PHPUnitが標準で組み込まれています。
なのでセットアップ完了後からすぐにテストコードを書き始めることができます!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/f18b5058-3042-b0da-8f67-5fff809aaf0d.png)

**「何故テストコードを書かないといけないのか」**に関しては、他の方の記事が素晴らしいのでこちらを見ていただければと思います。

https://qiita.com/halkt/items/930097f76f5d82f9079b

https://qiita.com/ryosukes/items/b8e1b855c2ce33471675

## `Feature`と`Unit`の使い分け
`tests`配下に、`Feature`と`Unit`のディレクトリがあります。

`Feature`にはControllerやRouting、Middlewareなどの機能テストを実装します。
それ以外の単体テスト

元記事を表示

time cleaved system(TCS)発明

https://github.com/JFLABO/gifts/blob/main/03/redme.md

タイムスタンプで文章を区切ってオブジェクト化する基礎ロジック

ワンファイルに色々書いてタイムスタンプで割るファイル形式を考えました。
すぐ忘れてしまう人、覚えておきたいことがある人におすすめ。

P.S.りんごジュース買いに行ってくるね 30分くらい離席します。

元記事を表示

[PHP]名前入力フォームにバリデーションをかける

#はじめに
今回は入力フォームにバリデーションをかけて、エラーメッセージを表示させる方法を簡単にまとめてみます。
かなりざっくりですのであらかじめご了承ください

#今回行う実装

今回行う実装は、名前が空or21文字以上入力された場合にエラーメッセージを表示させていきます。

バリデーションに関する関数は以下です。

“`validation.php


“`

この関数はとても単純です。
if文によって、引数の文字列が空あるいは21文字以上だった場合に、エラー文配列に、エラー文を格納してそのエラー文配列を返します。

エラー文配列はindex.phpの11

元記事を表示

【PHP】API実行ツールを作ってみよう(その4)

#はじめに
PHPでツール作成の6回目です。
[前回](https://qiita.com/noji505/items/49941dba6d5d4f12e73f)はChrome拡張機能でクライアントを作成しましたが、
今回はPHPで作成しようと思います。

#クライアント作成
クライアントから作成してみましょう。
作成場所は「c:¥xampp¥htdocs¥temp_api_php」フォルダになります。
temp_api_php」フォルダ内に「client.php」ファイルを作成します。
中身は下記になります。

“`php:client.php

元記事を表示

phpについて

PHPの次は何を勉強しようかな。

元記事を表示

[Laravel] カラムの追加・リネーム/型の変更のやり方をまとめてみた

# はじめに
またLaravelです。新人研修にて開発途中からタイトルにある操作が必要になったのでまとめました。

# 検証環境
– macOS Catalina ver 10.15.7
– Docker ver 20.10.5
– docker-compose ver 1.29.0
– Laravel ver 7.30.4
– MySQL ver 8.20.3

# 内容
##マイグレーションの作成
– 基本的な作成の仕方
– [ドキュメント(Laravel 7.x)](https://readouble.com/laravel/7.x/ja/migrations.html)を参照してください。
– モデルと同時に作成したい
– php artisan make:model Test –migration
– Testモデルの作成と”create_tests_table”マイグレーションファイルの生成が行われる。

## カラムの追加
– カラムを追加する時に忘れてはならないのが、「どのカラムの後に対象のカラムを追加するか」(これを考慮しないと見づらくて、気持ちが悪いと

元記事を表示

サイバー攻撃についてまとめてみた

#はじめに
最近勉強していてふと、「あれ、ただ機能をつくるだけじゃなくてサイバー攻撃についても知識も学ばないと企業に大損害与えるエンジニアになってしまうのでは?」と不安になりました。今回は、世の中のサイバー攻撃についてまとめていきます

#サイバー攻撃の目的
そもそも、サイバー攻撃ってなんのためにやるんでしょうか?暇つぶし?利益の強奪?
理由については、様々ありますが主なものとして金銭の要求が挙げられます。例えば、不正アクセスで個人情報やクレジットカードの番号を盗み取ったり、あるいは盗んだ機密情報で金銭の要求をしたりする事例があります。他にも、不満を持つ企業や組織が運営するシステムにダメージを与えて、損害を発生させることを目的としたサイバー攻撃もあるみたいです。本当に厄介ですが、エンジニアたるものこうした悪とも戦わないといけません!

#サイバー攻撃の種類

それでは、実際にどんな攻撃があって、現実にどんなことが起きたのかみていきましょう

##マルウェア
マルウェアは、コンピュータやネットワークに被害を与えることを目的に作られた不正なソフトウェアの**総称**です。有名なもので言えば

元記事を表示

補遺: Laravel でテスト駆動開発するときの守破離と序破急

## この記事について

2021/5/29 に行われた PHPカンファレンス沖縄2021 にて同名タイトルで発表させていただいた内容の補遺です。

資料はこちらです。
https://app.pitch.com/app/public/presentation/a47a906e-6b08-47d6-b5bd-cebdb47c9a57/5cd29fef-3fca-485d-a720-332b689453b0

テスト駆動開発未経験者、あるいはトライしたことはあるけどやめてしまった、というような方を想定し、デモで実際にコードを書きながら流れを説明したんですが、思い返すと少しスピードが速かったかな、と思ったので、テキストで補足することにしました。

本記事のコードと発表時のコードとに相違がある場合は、基本的にこちらを正としていただければ、と思います。

## はじめに

### 環境

– PHP: 8.0.2
– Laravel: 8.40.0

### お題

運転代行サービスの運賃見積もり

ドライバー用のアプリケーションの API で、乗車時に出発地点と到着地点の座標をもとに距離を計

元記事を表示

リーダブルコード・PSRから学ぶ 命名規則

先日の社内ランチ勉強会にて発表した内容をまとめます。

リーダブルコードはJavaやC++等で書いてあり、サンプルコードがしっくりこないことがあります。
今回は私が最も馴染みがあるPHPに落とし込んで読んでいきます。

# 参考資料
– [リーダブルコード(2章 名前に情報を詰め込む)](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theo

元記事を表示

外部キー制約をかけてる親と子の削除の仕方(Laravel )

勉強用メモです
まず外部キー制約とは、ざっくり自分の理解だと
 『親テーブルと子テーブルがあって、「子テーブルのこのカラムには好き勝手な値を入れちゃダメだよ。親テーブルのこのカラムから選んで入れてね」な制約のこと』

で、親テーブルのあるレコードと、関係してる子テーブルのレコードを同時に消したい。
でも制約があるからControllでただ“`delete()“`実装してもエラーになりました(でも実装は必要です)

そんな時は、外部キー制約を実装したmigrationファイルにこう書きます

“`
$table->foreign(‘folder_id’)->references(‘id’)->on(‘folders’)->onDelete(‘cascade’);
“`

foreignには 子テーブルで親と連携したいカラム
referencesには 親の何のカラムと連携したいか
onには 親migrationのテーブル名
の後ろに

“`
onDelete(‘cascade’);
“`
を入力したら

親が削除されたら子も削除できるようになりました!

あ、

“`
php

元記事を表示

laravel5.5 シーダーファイルについてまとめる

#シーダとは
データベースのテーブルにダミーのレコードを準備する機能
「シーディング」と呼ばれる。これは、シード(最初から用意しておくレコード)を生成する機能

主な手順は3つ
①シーディングのためのシーダーファイルを生成する。
②シーディングファイルを編集してシードを追加していく
③コマンドでシーディングを実行する

#シーディングのためのシーダファイルの生成方法
Laravelのappアプリ名ディレクトリ直下で以下のコマンドを実行

“`
php artisan make:seeder ファイル名(例 UserTableSeeder)
“`

database/seedsにファイルが生成されているため編集

“`php:database/seeds/UserTableSeeder
DB::table(‘employees’)->insert([
[
‘name’ => ‘テストユーザー1’,
‘email’ => ‘test1@example.com’,
‘password => Hash

元記事を表示

laravel8のマイページの作り方(初心者向け)

#今回の完成品
始めの状態がこの画面で、、、、
![スクリーンショット 2021-05-29 13.40.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/9c2dd457-b387-b2d0-01f8-6bfd3c470ed6.png)
マイページ画像を変更すると、
![スクリーンショット 2021-05-29 13.41.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/6cbaa4e1-a720-8dc2-2147-7e099c78d7b0.png)
こうなります!!!
#具体的に実装するもの
– マイページの制作
– usersテーブルから認証済ユーザーのデータを取得
– usersテーブルにマイページ写真の初期値を入れる
– 認証済みユーザーがマイページ写真を新たに選定した際、usersテーブルの初期値と入れ替える

#ログイン中のユーザーのデータをusersテー

元記事を表示

ロール切替をしてaws-sdk-phpを使う

# ロール切替をしてaws-sdk-phpを使う

環境別にアクセスキー・シークレットアクセスキーを変更せずスイッチロールを使ってアクセス環境を変更してみた

スイッチロールはこちらの記事を参考

https://qiita.com/morita-toyscreation/items/eeba120471cfad628c49

## aws-sdk-phpの導入

PHP側でAWSを使うためaws-sdk-phpを使う
composerを使って導入

*composer.json*

“`json
{
“name”: “sample/sample”,
“authors”: [
{
“name”: “morita-toyscreation”,
“email”: “morita@toyscreation.jp”
}
],
“require”: {
“aws/aws-sdk-php”: “3.*”
}
}
“`

*インストール*

“`
$ composer install
“`

## ユーザー追加

ロール切

元記事を表示

Laravelで毎月の支出を確認するお小遣い帳をつくる(1)

# 記事の目的
– 約2ヶ月ほどさわっていたLaravelの使い方の備忘録
– 未来の自分のため、artisanコマンドぐぐったり教材見返さなくてこれを見返せばいいようにしたい。

# 注意点
– 下記の大きな流れにそって、記事を更新していくので、小出しに出していきます。
– 経験がまだまだ浅いので、内容に不備があればコメントいただけると助かります。

## 大きな流れ
– Dockerで環境構築
– CRUD作成
– クロス集計について
– UIの調整(Bootstrapを使用)
– jsライブラリとの連携
– リファクタ(未定)
– AWSのEC2にデプロイ(未定)

# 環境
– MacOS 10.15.6
– PHP 7.4.18
– Composer 2.0.10

# Dockerで環境構築
– こちらの記事が神なので、これを参考にする。
– https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
– なお、php-MyAdminを使用したいので、下記記事を参考にしながた、docker-compose.ymlには下記

元記事を表示

Laravelでクラスのひな形を作成する方法の決定版

## はじめに
この記事はLaravelを使ったクラスのテンプレートファイルの作成についての記事です。
この記事を読み終えた頃には誰でも自由なテンプレートを作れるようになります。

## 対象
– PHP 8.0
– Laravel 8.0

※下位環境でも動作する場合がございます

## 初級編

“`
php artisan make:cast クラス名 // 新しいEloquentキャストクラスを作成します
php artisan make:channel クラス名 // 新しいブロードキャストクラスを作成します
php artisan make:command クラス名 // 新しいコマンドクラスを作成します
php artisan make:component クラス名 // 新しいコンポートネントクラスを作成します
php artisan make:controller クラス名 // 新しいコントローラクラスを作成します
php artisan make:event クラス名 // 新しい

元記事を表示

Laravelでデータベースのテーブル名やカラム詳細情報を取得する方法

## はじめに
この記事はLaravelを使ったテーブル名一覧や各カラム詳細情報の取得方法についての解説記事です。

## 動作確認環境
– PHP 8.0
– Laravel 8.0

※下位環境でも動作する場合がございます

## 全テーブル情報の取得
“`php
use DB;

// 全スキーマ情報を取得
$schema = DB::connection()->getDoctrineSchemaManager();

// テーブル名一覧を取得
$tableNames = $schema->listTableNames();

foreach ($tableNames as $tableName) {
// テーブル情報を取得
$schema = DB::connection()->getDoctrineSchemaManager();
$table = $schema->listTableDetails($tableName);

// カラム情報を取得
$columns = $table->getColumns();

$c

元記事を表示

OTHERカテゴリの最新記事