- 1. 必要なものをインストール
- 2. 環境構築
- 2.1.1. [Laravel]コメントに紐づいたアンサーがアコーディオンで表示される実装
- 2.1.2. 【PHP基礎⑩】絶対値の取得
- 2.1.3. 【PHP基礎⑨】if構文-4.複数の条件分岐
- 2.1.4. PHPStanのレベル別エラー発生のサンプルコードと解決方法
- 2.1.5. 早期リターンで簡単リファクタリング
- 2.1.6. Laravel6+Vue.jsの連携手順
- 2.1.7. Laravel のコレクションとは
- 2.1.8. Laravel 8.xで天気予報のWeb APIを作成 (3)
- 2.1.9. Java使いからPHPerに転身した際にはまったこと
- 2.1.10. laravel Unitテスト 作成したテストクラスでsetUp関数をオーバーライドしたらエラーが出た
- 2.1.11. PHP マジックメソッド __invoke()について
- 2.1.12. Laravel開発時エラー、やったこと覚えている範囲で・・・
- 2.1.13. ここがつらい! Slack API
- 2.1.14. Laravel 8.xで天気予報のWeb APIを作成 (2)
- 2.1.15. MySQL テーブル構造の md を作成
Laravel環境構築編【開発メモ】【コマンド】
## M1チップMacのもの
`% platform: linux/amd64`
といったコードをdocker-compose.ymlに入れないと動かない。
また、dockerデスクトップを起動してからじゃないとそもそもの
`% docker-compose up -d`
というものも動かないので注意が必要。
(他の方の記事も参考にしているのにやってしまっているのが現状・・・)
エラーが発生しているので書いておきます。
Encountered errors while bringing up the project.これはポートが他のもので埋まっているということらしい・・・
何してんだかw
## 結局コマンドを変更した。
後日某プログラミング学習サイトでLaravel開発の動画を見たところ・・・
もっと簡単なコマンドを発見したのでここに書いておきます
`% curl -s “https://laravel.build/プロジェクト名” | bash`
このコマンドを打つと、現在いるディレクトリ内に最新版をインストールしてくれます。
その後・・・sailコマンドを実行するのにdocker
PHPのクラス継承で注意すべきこと:バグなのか、仕様なのか?
|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|PHPで継承を使っていると、アクセス修飾子でおかしな挙動がある。バグなのか、仕様なのか分からないが、注意が必要である。
## Userクラス単独でのテスト
まず、Userというクラスを定義してみる。idとnameを属性に持たせる。
“`php
setId($id);
$this->setName($name);
}
public function getId(): string { return $this->id; }
public function getName(): string { return $this->name; }
Laravelでテーブル・モデル・ビュー・コントローラーを作成したい。
Viewの作成
C:\xampp\<プロジェクト名>\resources\viewsフォルダに、任意のテーブル名でフォルダを作成。
ここでは例として、”projects”という名前でフォルダを作成する。
projects内には、一覧View(index.blade.php)、新規追加View(create.blade.php)、編集View(edit.blade.php)を用意する。createとeditは、detailというフォルダ下に作成しておく。

引用元:**◎PHPはサーバー上で動いている**
– これが超大事。
– ~~PHP、WEBサーバー(Nginx,Apache,IISなど)がないと動けない。~~
– WEBサーバーは必ずしも必要ではない。ブラウザを介さず、コマンドとして動作させる目的で組まれたPHPスクリプトなども存在する!
※ @px904 さんにご指摘いただき上記修正いたしました。ありがとうございます!
– HTML,CSS,JavaScriptがデスクトップとかに適当にファイル作成しても動くのは、それらが **ブラウザ上で動くプログラム
XAMPPを用いた仮想サーバー上にLaravelを構築したい。
必要なものをインストール
・XAMPPのインストール
下記から、XAMPPをインストールする。
https://www.apachefriends.org/jp/index.html/

設定では、すべてにチェックを入れてもよい。
Composerインストール
下記からインストール。
https://getcomposer.org/download/

チェック不要。
環境構築
XAMPP起動<
[Laravel]コメントに紐づいたアンサーがアコーディオンで表示される実装
### ルーティング
“`routes/web.php
//コメント
Route::resource(‘comments’,’CommentController’)->only([
‘store’,’destroy’
]);
Route::get(‘/comments/{recipe}’,’CommentController@create’)->name(‘comments.create’);
//アンサー
Route::resource(‘answers’,’AnswerController’)->only([
‘index’,’store’,’destroy’
]);
Route::get(‘/answers/{comment}’,’AnswerController@create’)->name(‘answers.create’);Route::get(‘/answers’,’AnswerController@index’)->name(‘answers.index’);
Route::post(‘/answers’,’AnswerController@stor
【PHP基礎⑩】絶対値の取得
[問題]
整数値を入力させ、その値を絶対値にして表示するプログラムを作成しなさい。
(できれば変数の値を絶対値に変えるようにする)# コード
“`php
$a = intval(fgets(STDIN));
echo abs($a);
“`↓「-8」と入力
# 結果
“`
8
“`☆絶対値
abs() ← absolute value(絶対値)に由来
【PHP基礎⑨】if構文-4.複数の条件分岐
[問題]
整数値を入力させ、値が正であればpositive、負であればnegative、0であればzeroと表示するプログラムを作成しなさい。# コード
“`php
$a = intval(fgets(STDIN));
if($a > 0){
echo ‘positive’;
}else if($a < 0){ echo 'negative'; }else{ echo 'zero'; } ``` ↓「0」と入力 # 結果 ``` zero ``` ☆複数の条件分岐(else if) if(条件式①){ ①が真のときに実行する処理; }else if(条件式②){ ①が偽で②が真のときに実行する処理; }else{ 全ての条件式が偽のときに行う処理; } ☆最初、else{ ;}の部分をelse if($a == 0)としていたけれど、 条件式①にも②にも当てはまらないのは0しかないため、elseだけでよい。
PHPStanのレベル別エラー発生のサンプルコードと解決方法
## 目次
– [はじめに](#はじめに)
– [前提](#前提)
– [レベル0](#レベル0)
– [レベル1](#レベル1)
– [レベル2](#レベル2)
– [レベル3](#レベル3)
– [レベル4](#レベル4)
– [レベル5](#レベル5)
– [レベル6](#レベル6)
– [レベル7](#レベル7)
– [レベル8](#レベル8)
– [レベル9](#レベル9)
– [おわりに](#おわりに)—
## はじめに
特に意識せず、コーディング標準ツールの PHPStan を利用していましたが、レベル毎にどの問題を補足してくれるのか気になったので、まとめてみました。
—
## 前提
バージョン
– PHP
– 8.1.6
– PHPStan
– 1.6.9こちらのリポジトリで確認しました
https://github.com/q23isline/study_php/tree/feature/add-sample-phpstan-error
—
## レベル0
—
### 基本的なチェック:シンタックスエラー
–
早期リターンで簡単リファクタリング
# 追記
@fujitanozomu
ご指摘ありがとうございます。この記事で取り上げているコードは早期リターンの例としては適切ではありません。
理由は早期リターン適用後のコードにコメントをつけて2つ目のコードと比較すると一目瞭然です。“`php
// 顧客が存在しない場合falseを返す
if (!$customer) return false;
// 顧客が有効でない場合falseを返す
if (!$customer->isActive()) return false;
// 最終ログイン日時を取得
$lastLogin = $customer->getLastLoginAt();
// 最終ログイン日時が存在しない場合falseを返す
if (!$lastLogin) return false;// 最終ログイン日時を返す
return $lastLogin;
“`
早期リターンを使用せず改善したコード
“`php
// 顧客が存在していて有効な場合
if ($customer && $customer->isActive()) {
// 最終ログイン日時
Laravel6+Vue.jsの連携手順
Laravel6とVue.jsを連携して、APIを実行するまでの手順を、メモがてら手順をまとめてみました。
SPAを作成しようとしている方などのご参考になれば嬉しいです?
> ### バージョン
> composer: 2.2.7
> php: 7.4.28
> laravel: 6.20.44
> npm: 6.14.12
> node: 14.16.1
> vue: 2.5.17
> vue-router: 3.1.3## laravelプロジェクト作成
~~~bash
composer create-project “laravel/laravel=6.*” {プロジェクトのお名前} –prefer-dist
~~~## プロジェクトのディレクトリに移動して、以下コマンド実行
~~~bash
php artisan serve
~~~
– 以下のようなログが出力されます。出力されるURLをコピーしておきましょう。
~~~bash
Laravel development server started: {ここに出力されるURLをコピー!}
~~~
– コピーしたUR
Laravel のコレクションとは
## SQL クエリとコレクションの境界
次の2つは同じ結果を返すが、実行されるSQLクエリが異なる。
“`php
$users = User::where(‘id’, ‘<', 2)->get(); // パターン1
$users = User::get()->where(‘id’, ‘<', 2); // パターン2 ``` tinker で確認してみる。クエリログを確認するため最初に `DB::enableQueryLog()` を実行する。 ```php $ php artisan tinker Psy Shell v0.11.4 (PHP 7.4.11 — cli) by Justin Hileman >>> DB::enableQueryLog()
=> null>>> User::where(‘id’, ‘<', 2)->get()
[!] Aliasing ‘User’ to ‘App\Models\User’ for this Tinker session.
=> Illuminate\Database\Eloquent\Collection {#
Laravel 8.xで天気予報のWeb APIを作成 (3)
Laravel 8.83.11で天気予報のWeb APIを作成しました。ソースコードは下記のgithubリポジトリで公開しています。
https://github.com/fukagai-takuya/weather-forecast
この投稿は下記の投稿の続きになります。
https://qiita.com/fukagai-takuya/items/9049712734cc1fdb04e9
https://qiita.com/fukagai-takuya/items/3cf47a7ff2c5ba290899
* 天気予報データは他のサイトからWeb APIで取得してデータベースに格納するようにしています。Laravelを使ってWeb APIを用意した簡単なプログラムになります。
* プログラムの概要と動作確認方法はこちらの[投稿](https://qiita.com/fukagai-takuya/items/9049712734cc1fdb04e9)に記載しました。
* この投稿にはプログラムを作成した際に実行したコマンドとソースコードの内容について記載しました。こちら
Java使いからPHPerに転身した際にはまったこと
# 概略
業界に入ってから長らくJavaをメインで使っていたプログラマである筆者が、業務でPHPを使うようになった際にはまったことを思い出して列挙していく。
詰まった時しか公式リファレンスとか見ないから何となくでやるとびっくりしてしまう。## マルチスレッド
Javaだとマルチスレッド当たり前なので、シングルトンだったりstaticな変数を更新していたりすると「そんなバカな、死にたいのか!?」と思ったりしたが、Webアプリケーションとして動くPHPでは通常リクエストごとに別プロセスが起動していてそんな問題になることはないようだった。## arrayがプリミティブ風に動く
内部的にどういう扱いになっているのか具体的にわかっていないけれど、arrayを代入したら別の配列となる。
Java的な常識だと同じオブジェクトの参照となるイメージだったから衝撃だった。
javaだと
“`java:Main.java
public class Main {
public static void main(String[] args) {
int[] array1 = {10, 20
laravel Unitテスト 作成したテストクラスでsetUp関数をオーバーライドしたらエラーが出た
# 概要
– laravelのUnitテストにて作成した独自のクラスにsetUp関数を使って継承元の関数をオーバーライドしようとしたときにエラーが出たのでまとめる。
# エラーまでの経緯
– 下記のように独自のテストクラスにsetUp()関数を記載した。(継承元のsetUp()も実行しないと行けない。)
“`FooTest.php
public function setUp()
{
parent::setUp();// その他のテスト実行時の初期処理
}
“`# エラー
“`
当該テストクラス名::setUp() must be compatible with テスト継承元クラス名::setUp(): void in 当該テストクラス名
“`# 解決までの経緯
– エラーを見るとどうやら当該テストクラスで定義しているsetUp()関数は返却値をタイプヒンティングで指定して上げる必要があるようだ。(継承元の関数をオーバーライドしたいなら戻り値の宣言も含めて同じ記載をしないと行けないっぽ
PHP マジックメソッド __invoke()について
# 概要
– PHPのマジックメソッドの一つである`__invoke()`について簡単にまとめてみる。
# マジックメソッド
– マジックメソッドが何たるかについては公式ドキュメントに記載されている。
– [https://www.php.net/manual/ja/language.oop5.magic.php](https://www.php.net/manual/ja/language.oop5.magic.php)
– ようは「特定の動作をさせたときに実行する関数」みたいな感じっぽい。(違ったらすみません。)# `__invoke()`
– このマジックメソッドは「インスタンス変数を関数のように呼び出したときに実行される関数」らしい。
– 下記を実行すると`xxx`が出力される。“`php
Laravel開発時エラー、やったこと覚えている範囲で・・・
# 学習を進めた時のエラー解除?やってみたこと(自分用メモ)
動画を見ながらLaravel開発環境構築をしていましたけど、なかなかうまくはいきませんでした。
## Laravelを立ち上げるときに発生したエラー
まずはどこに立ち上げたのかわからなくなってしまったけれど、userの直下ディレクトリ内にできたらしい。
そのtodoを引っ張ってきてvscode内に展開、npmもアップデートしないといけないようなエラーが出たけど、なんかよくわからないけど解消されたらしい。
Laravel自体のバージョンは最新のものらしい(todo)の名前で立ち上げたものは・・・
`$ php artisan serve`
このコマンドを打つと、あら不思議!
Localhost:8000番で開発サーバーが立ち上がってくれる!
composer.lockやcomposer.jsonに書いてあるものとバッティングしていてlarval/uiのDLがやりにくかったけれど、version指定を外したら最新のUIが実装できました。`$ composer require laravel/ui “^1.2″` ←クォーテー
ここがつらい! Slack API
– 半分ネタ記事です。あんまり真面目に書きません。
– 項目数が多いので,気力でなんとか書きます。分類は諦めます。
– 他にもある!っていうのがあったらコメント欄で教えて下さい。気が向いたら追記します。## 公式の TypeScript 型定義がもはや型定義を諦めている
`辛い度: ★★★★★`
辛い中でもこれはかなり上位に来るやつ。
https://github.com/slackapi/slack-api-specs
こちらに OpenAPI 形式で仕様が定義されていて,
– https://github.com/slackapi/node-slack-sdk/tree/main/packages/web-api/types
ここに仕様に基づいて TypeScript の型定義ファイルが吐かれるようになっています。 Git 管理されていないので,実際のリリースを見てみましょう。
– https://unpkg.com/@slack/web-api@6.7.2/dist/response/ReactionsGetResponse.d.ts
–
Laravel 8.xで天気予報のWeb APIを作成 (2)
Laravel 8.83.11で天気予報のWeb APIを作成しました。ソースコードは下記のgithubリポジトリで公開しています。
https://github.com/fukagai-takuya/weather-forecast
– 天気予報データは他のサイトからWeb APIで取得してデータベースに格納するようにしています。Laravelを使ってWeb APIを用意した簡単なプログラムになります。
– この投稿にはプログラムを作成した際に実行したコマンドとソースコードの内容を記載しました。プログラムの概要と動作確認方法は下記の投稿に記載しました。
https://qiita.com/fukagai-takuya/items/9049712734cc1fdb04e9
– 今回は、Routing、Controllers、Eventsの部分のコードを作成したときに使用したコマンドとコードの内容についてまとめました。残りは下記の投稿に記載しました。
https://qiita.com/fukagai-takuya/items/e60b0aeb3a44a44c95ba
–
MySQL テーブル構造の md を作成
## マイグレーションで積み上げたテーブル構造を可視化する
Laravel でデータ構造を管理するのに困るのは、マイグレーションを積み上げすぎて、現在の構造が把握できないこと。
ということで、次のコマンドでマークダウンファイルが作成できるように artisan コマンドを書いてみた。
“`
php artisan schema:md
“`– `database/schema/mysql-schema.md` を出力する。
– mysqldump が使える前提。
– 解析に必要な dump ファイルはテンポラリに作成して破棄しているので、`mysql-schema.dump` とは独立。実行すると次のようなマークダウンファイルを作成する。開発中はソースコードと一緒に確認できる。納品時にはマークダウンを pdf や xlsx にするとか。
マイグレーションでは、カラムはもちろんテーブルにもコメント付けに徹底しておく。“`md
# Table Definition of `example`## companies (会社)
|Field