- 投稿日:2020-06-02T23:41:46+09:00
マイグレーション実行時にmysqlでユーザーを作成していなかった為エラー
マイグレーション実行時エラー
laravel7で新しくプロジェクトを作成したので
とりあえずマイグレーションの実行ししてみたらエラー発生
SQLSTATE[HY000] [1045] Access denied for user 'user_name'@'172.20.0.4' (using password: YES) (SQL: select * from information_schema.tables where table_schema =table_name and table_name = migrations and table_type = 'BASE TABLE')原因
ただ単に.envに設定したユーザーとパスワードを登録していなかっただけ
解決方法
mysqlでユーザーを作成をする
create user 'user_name' identified by 'pass';権限の確認
新規作成したユーザには
何も権限がないことを意味するUSAGEが付いているmysql> show grants for user_name@'%'; +---------------------------------------+ | Grants for phper@% | +---------------------------------------+ | GRANT USAGE ON *.* TO `user_name`@`%` | +---------------------------------------+ 1 row in set (0.00 sec)全てのDBが対象となるグローバル権限【CREATE権限】の付与
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'user_name'@'%' WITH GRANT OPTION;実行後もう一度マイグレーションを実行したら成功
- 投稿日:2020-06-02T19:21:29+09:00
LaravelプロジェクトからFirebaseAPIを利用する前準備
環境について
OS:AmazonLinux21.サービスアカウントキーを作成する
GoogleCloudPlatformの認証サービス画面より
「サービスアカウントキー」を作成する
※APIキーではないサービスアカウント
「firebase-adminsdk」を選択キータイプ
「JSON」
を選択して、作成する2.環境変数を設定する
1.で取得したJSONファイルをLaravelプロジェクトのディレクトリに配置し
環境変数(GOOGLE_APPLICATION_CREDENTIALS)にファイルパスをセットするexport GOOGLE_APPLICATION_CREDENTIALS="Laravelプロジェクトのディレクトリ/*****.json"3.gRPC For PHPのインストール
こちらのGoogleのガイドを参考にgrpcをインストール
https://cloud.google.com/php/grpc?hl=ja
# pecl install grpc Build complete. Don't forget to run 'make test'. running: make INSTALL_ROOT="/var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0" install Installing shared extensions: /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0/usr/lib64/php/modules/ running: find "/var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0" | xargs ls -dils 9083594 0 drwxr-xr-x 3 root root 17 12月 23 20:06 /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0 11304125 0 drwxr-xr-x 3 root root 19 12月 23 20:06 /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0/usr 19801702 0 drwxr-xr-x 3 root root 17 12月 23 20:06 /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0/usr/lib64 27955984 0 drwxr-xr-x 3 root root 21 12月 23 20:06 /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0/usr/lib64/php 3604422 0 drwxr-xr-x 2 root root 21 12月 23 20:06 /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0/usr/lib64/php/modules 3604421 35144 -rwxr-xr-x 1 root root 35985152 12月 23 20:06 /var/tmp/pear-build-rootyXfFt6/install-grpc-1.26.0/usr/lib64/php/modules/grpc.so Build process completed successfully Installing '/usr/lib64/php/modules/grpc.so' install ok: channel://pecl.php.net/grpc-1.26.0 configuration option "php_ini" is not set to php.ini location You should add "extension=grpc.so" to php.iniPHPのgrpc拡張機能を有効にする。
# vi /etc/php.d/20-grpc.ini ; Enable gRPC extension module extension=grpc.so # systemctl restart httpd4.FirebaseAPIライブラリを追加
LaravelプロジェクトにFirebaseAPIライブラリを追加します。
#composer require "grpc/grpc:^v1.1.0" #composer require "google/protobuf:^v3.3.0" #composer require google/cloud-firestore
- 投稿日:2020-06-02T18:12:04+09:00
MacでLaravel開発環境構築
概要
環境
macOS Mojave 10.14.6
Homebrewのインストール
Homebrewとはパッケージのインストールやアンインストールを簡単に行うことのできるパッケージ管理システムのひとつです。
Homebrewページに移動し、インストールコマンドをターミナルで実行します。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"インストールできたか確認
$ brew -v Homebrew 2.2.15 Homebrew/homebrew-core (git revision 5385; last commit 2020-05-05)HomebrewでPHPをインストールする
以下のコマンドでインストールするPHPパッケージを確認する。
$ brew search php ==> Formulae brew-php-switcher php-code-sniffer php@7.2 ✔ phplint phpmyadmin phpunit php php-cs-fixer php@7.3 ✔ phpmd phpstan ==> Casks homebrew/cask/eclipse-php導入したいバージョンのPHPをインストールする。
$ brew install php@7.3インストールできたか確認
$ php -vComposerをインストールする
Composerとは、PHP向けのパッケージ管理システムです。
Homebrewでインストールする
$ brew install composerインストールできたか確認
$ composer -V※直接Composerをインストールする方法
Homebrewを利用せずこちらでComposerファイルを直接ダウンロードして配置する方法もあります。
ここから、最新バージョンのリンクをクリックしてください。
composer.pharというファイルがダウンロードフォルダにダウンロードされます。
続いて以下のコマンドを実行します。$ cd ~/Download/ $ sudo mv composer.phar /usr/local/bin/composerこれでいつでもcomposerが呼び出せるようになりました。
配置したcomposerのパーミッション(アクセス権)を変更します。
$ chmod a+x /usr/local/bin/composerこれでcomposerが実行できるようになりました。
Homebrewでインストールした時と同様に、
「composer -V」
で正常にインストールできているか確認しましょう。Laravelのインストール
Composerを用いてLaravelをインストールします。
#Laravelインストール $ composer global require "laravel/installer"環境変数PATHの設定
$ echo "export PATH=~/.composer/vendor/bin:$PATH" >> ~/.bash_profile source ~/.bash_profilelaravelのバージョン確認
$ php artisan -V以上で、Laravel開発環境の構築は終了です。
お疲れ様でした。
- 投稿日:2020-06-02T17:02:07+09:00
LaravelでどうしてもSESSIONが追加できないときにすること
こんなにもシンプルなSESSIONが追加できない
app/Http/Controllers/HogeController.phppublic function show() { if (!Session::has('token')) { Session::put('token', 'token!'); var_dump('saved!'); } var_dump(Session::get('token')); return view('welcome'); }初回のみ「saved!token!」と表示され、2回目以降は「token!」となってほしい。
しかし、何度試しても「saved!token!」が表示される。不用意にダンプしたらダメなんだってさ
https://laracasts.com/discuss/channels/laravel/sessions-are-not-saving?page=1
sessions work fine, but only if your code exits normally and runs the terminable middleware. If you dd() in your code then the session is not saved
https://laravel.com/docs/5.5/middleware#terminable-middleware
you should also run php artisan route:list and check that you have web against each route, once only per route
テストコードのvar_dumpを削除したらセッションにちゃんと保存できた。
app/Http/Controllers/HogeController.phppublic function show() { if (!Session::has('token')) { Session::put('token', ’token!’); } return view('welcome'); }
- 投稿日:2020-06-02T16:53:02+09:00
【Laravel】Laravel上でスーパーグローバル「$_SERVER」を参照する。
メモとして残します。
$_SERVER
でも普通に参照できますが、フレームワークを使っている以上、スーパーグローバル変数を直接参照するのはどうかということで、一応、お作法にのっとって、Laravel上でスマートに参照する方法を紹介。下記の例ではLaravelのヘルパ
request
を使用して、帰ってきたオブジェクトのserver
プロパティを参照しています。■確認方法
$_SERVER要素全て
request()->server; //↓実行結果 // "MIBDIRS" => "C:/hoge/php/extras/mibs" // "MYSQL_HOME" => "\xampp\mysql\bin" // "OPENSSL_CONF" => "C:/hoge/apache/bin/openssl.cnf" // "PHP_PEAR_SYSCONF_DIR" => "\xampp\php" // "PHPRC" => "\xampp\php" // "TMP" => "\xampp\tmp" // "HTTP_HOST" => "hoge.www.com" // "HTTP_CONNECTION" => "keep-alive" // "HTTP_PRAGMA" => "no-cache" // "HTTP_CACHE_CONTROL" => "no-cache" // "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" // "HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" // "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" // "HTTP_REFERER" => "http://hoge.www.com/" // "HTTP_ACCEPT_ENCODING" => "gzip, deflate" // "HTTP_ACCEPT_LANGUAGE" => "ja,en-US;q=0.9,en;q=0.8" // "HTTP_COOKIE" => "remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d=eyJpdiI6IjBIU1JxWVFCeG96T1RWeDFBcUtrVVE9PSIsInZhbHVlIjoieU5pRnVudTJub1wvTzJpUndLZlQ4MzNlaVlqdEZqK24xUTlQNX ▶" // "PATH" => "hoge" // "SystemRoot" => "C:\WINDOWS" // "COMSPEC" => "C:\WINDOWS\system32\cmd.exe" // "PATHEXT" => ".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC" // "WINDIR" => "C:\WINDOWS" // "SERVER_SIGNATURE" => "<address>Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.8 Server at hoge.www.com Port 80</address>" // "SERVER_SOFTWARE" => "Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.8" // "SERVER_NAME" => "hoge.www.com" // "SERVER_ADDR" => "127.0.0.1" // "SERVER_PORT" => "80" // "REMOTE_ADDR" => "127.0.0.1" // "DOCUMENT_ROOT" => "C:/Develop/hogeproject/public" // "REQUEST_SCHEME" => "http" // "CONTEXT_PREFIX" => "" // "CONTEXT_DOCUMENT_ROOT" => "C:/Develop/hogeproject/public" // "SERVER_ADMIN" => "hoge@hoge.test.com" // "SCRIPT_FILENAME" => "C:/Develop/hogeproject/public/index.php" // "REMOTE_PORT" => "59332" // "GATEWAY_INTERFACE" => "CGI/1.1" // "SERVER_PROTOCOL" => "HTTP/1.1" // "REQUEST_METHOD" => "GET" // "QUERY_STRING" => "" // "REQUEST_URI" => "/" // "SCRIPT_NAME" => "/index.php" // "PHP_SELF" => "/index.php" // "REQUEST_TIME_FLOAT" => 1591082776.119 // "REQUEST_TIME" => 1591082776要素を指定して参照
//request()->server->get('要素名');//SERVER_NAMEなど request()->server->get('SERVER_NAME'); //↓実行結果 //localhost.hoge.com
- 投稿日:2020-06-02T16:38:47+09:00
LaravelでFirebase Admin SDK for PHPを利用する
インストール
composer require kreait/firebase-php composer require kreait/laravel-firebaseLaravelに設定追加
config/app.php/* * Package Service Providers... */ Kreait\Laravel\Firebase\ServiceProvider::class,.envAPP_NAME=Laravel APP_ENV=local # ... 省略 ... FIREBASE_CREDENTIALS=../firebase_credentials.jsonconfig配下に設定ファイルを作る
php artisan vendor:publish --provider="Kreait\Laravel\Firebase\ServiceProvider" --tag=config
config/firebase.php
が作成される。試してみる
app/Http/Controllers/FireTestController.php<?php namespace App\Http\Controllers; use Kreait\Firebase\Auth; class FireTestController extends Controller { private $auth; public function __construct(Auth $auth) { $this->auth = $auth; } public function show() { $anonymous = $this->auth->signInAnonymously(); print_r([$anonymous->idToken(), $anonymous->firebaseUserId()]); return view('welcome'); } }これで、idTokenとfirebaseUserIdが取得できました。
あとはトークン使って好きなように。idTokenは有効期限が1時間のアレ。
firebaseUserIdは、FirebaseConsoleのAuthenticationページでユーザーUIDと表示されているヤツ。
- 投稿日:2020-06-02T15:26:20+09:00
Laravelの認証でwebとapiの両方を使う
LaravelでのAPIの認証は、こちをご参照ください。
→ LaravelでのJWT認証Laravelの認証は、
config/auth.php
にのguardにて設定しますが、defaultをapiに設定するとwebでの認証ができなくなってしまいます。config/auth.php'defaults' => [ 'guard' => 'api', // ← ここです。 'passwords' => 'users', ],一つのLaravelプロジェクトで、webとapiの両方を実装したいときの対応になります。
Laravelでは
auth()
や、Auth::login()
などで使用する認証は、guardのデフォルトの方となるようです。
デフォルト以外のものを使うときは、Auth::guard('[guard名]')->login()
とguardを指定して使用します。
そうすることで、webとapiの両立を実現します。defaultの設定
guardのdefaultはwebにしておきます。
make:authのコントローラーもそのまま使えるので便利です。config/auth.php'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ],API側の認証のコントローラにてguardを指定する
実装例のAuthControllerは、LaravelでのJWT認証で使用したものです。
Quick startで紹介されているものから少しだけ修正しています。
それに対して、上記のようにauth()
をAuth::guard('api')
に変更します。app/Http/Controllers/Api/AuthController.php<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use Illuminate\Auth\Events\Registered; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\Controller; class AuthController extends Controller { /** * Create a new AuthController instance. * * @return void */ public function __construct() { // $this->middleware('auth:api', ['except' => ['login']]); } /** * Get a JWT via given credentials. * * @return \Illuminate\Http\JsonResponse */ public function login() { $credentials = request(['email', 'password']); if (! $token = Auth::guard('api')->attempt($credentials)) { return response()->json(['error' => 'Unauthorized'], 401); } return $this->respondWithToken($token); } /** * Get the authenticated User. * * @return \Illuminate\Http\JsonResponse */ public function me() { return response()->json(auth()->user()); } /** * Log the user out (Invalidate the token). * * @return \Illuminate\Http\JsonResponse */ public function logout() { Auth::guard('api')->logout(); return response()->json(['message' => 'Successfully logged out']); } /** * Refresh a token. * * @return \Illuminate\Http\JsonResponse */ public function refresh() { try { return $this->respondWithToken(Auth::guard('api')->refresh()); } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) { return response()->json(['error' => 'Unauthorized'], 401); } } /** * Get the token array structure. * * @param string $token * * @return \Illuminate\Http\JsonResponse */ protected function respondWithToken($token) { return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => Auth::guard('api')->factory()->getTTL() * 60 ]); } }認証後のコントローラー
auth()->user()
は、変更しなくてもユーザー情報の取得はできているようなので、この認証を使って作成するAPI側は特にguardの指定はしなくてもよさそうです。
- 投稿日:2020-06-02T10:26:58+09:00
firebase Cloud Messaging + Laravel + Vue.js、 PWAで web push 対応のリアルタイムな チャットを作る 作例編
以前の 製作事例公開内容となり、他ブログ等で公開済ですが。こちらにも記事残したいと思います
概要的な内容が多く、コード説明等が少ないので、紹介程度の記事となります概要
firebase Cloud Messaging, Notification API 等で
web push通知対応のチャット機能の作成となります。参考のコード / GitHub
https://github.com/kuc-arc-f/lara58a_6chat
構成
firebase Cloud Messaging / FCM
Progressive Web Apps / PWA
Notification API
Laravel 5.8
Vue.js
nginx
mysql画面
PC版 / web push 受信 : winタスクバーの通知画面と、通知音出ます。
FCM, PWAの、注意点など
・HTTPで使用できない。 設置環境はSSL化しておく必要あり
・ブラウザの通知設定を。許可に変更する必要あり設計面での、注意点
・Cloud messageのサンプル等見ると、メンバー(自分以外) に、web pushする例が無かった気がしましたが。
web push送信時に、送信先トークンを指定する必要があり。管理方法含めて検討する必要がありました
・例として、DBに参加チャット 各メンバーのトークンを保存し。送信時に利用する事にしました。
送信時には、送信者に 自分のトークンを含めない仕様にしています。実装など
web push
function fcm_send(send_title, send_body, IID_TOKEN, FCM_SERVER_KEY){ if(IID_TOKEN.length < 1){ return; } var key = FCM_SERVER_KEY; var to = IID_TOKEN; var notification = { 'title': send_title, 'body': send_body, 'icon': 'firebase-logo.png', 'click_action': 'http://hoge' }; fetch('https://fcm.googleapis.com/fcm/send', { 'method': 'POST', 'headers': { 'Authorization': 'key=' + key, 'Content-Type': 'application/json' }, 'body': JSON.stringify({ 'notification': notification, 'to': to, }) }).then(function(response) { }).catch(function(error) { console.error(error); }) };・web push 受信する
messaging.onMessage コールバックで、受信後の通知、再描画等messaging.onMessage((payload) => { var notify = payload.notification; recv_pushMessage("", notify.body); var data = { 'id' : 0, 'chat_id': CHAT_ID , 'user_id': 0, 'body': notify.body, 'created_at': null, }; console.log(notify.body ); });・ Notification API で、通知
function recv_pushMessage(title, body){ if (!('Notification' in window)) {//対応してない場合 alert('未対応のブラウザです'); } else { // 許可を求める Notification.requestPermission() .then((permission) => { if (permission === 'granted') {// 許可 var options ={ body: body, icon: 'https://hoge.net/icon.png', tag: '' }; var n = new Notification(title,options); console.log(n); setTimeout(n.close.bind(n), 5000); } else if (permission == 'denied') {// 拒否 } else if (permission == 'default') {// 無視 } }); } }参考のページ
https://knaka0209.hatenablog.com/entry/lara58_13chat
- 投稿日:2020-06-02T07:25:09+09:00
Laravelのコレクションでユーザー(グループ)ごとに最新のメッセージを取得
うちでLaravelで質問回答アプリを実装しています。
対話者のメッセージボックスを作りたい、要件をまとめました:ログイン中のユーザーはuser_meとし、他のユーザーごとに一番新しいメッセージを提示するメッセージリストを作りたいです。
そこでクリックしたら、そのユーザーとのメッセージモダルに飛ぶ。
ユーザー名は相手の名前、メッセージは対話中の一番新しいメッセージ(自分からメッセージのも含む)SQLよりLaravelのコレクションはもっと使いやすいと思い、以下で案を。
まずuser_meと関わる全てのメッセージを時間順に並べて取得、次に対話両方をグループとし、一番新しいメッセージだけ、リストにプッシュする。
リストに登録済のグループのメッセージはプッシュしません。以下はMessageRepositoriesのメソッドの一部です。
namespace App\Repositories; public function selectMessageByEachUser() { $me_id = user('api')->id; $messages = Message::with(['fromUser', 'toUser']) ->where('to_user_id', $me_id) ->orwhere('from_user_id', $me_id) ->orderBy('created_at', 'desc') ->get(); $chat_room_groups = []; $new_messages = collect(); foreach ($messages as $message) { $match_ids_1 = [$message->from_user_id, $message->to_user_id]; $match_ids_2 = [$message->to_user_id, $message->from_user_id]; if ($new_messages->isEmpty()) { $new_messages->push($message); array_push($chat_room_groups, $match_ids_1); } else { $res = !in_array($match_ids_1, $chat_room_groups, true) && !in_array($match_ids_2, $chat_room_groups, true); if ($res) { $new_messages->push($message); array_push($chat_room_groups, $match_ids_1); } } } return $new_messages; }次にメッセージコントローラは処理したリストをもらい、APIリソースをフロントエンドに発信
namespace App\Http\Controllers; public function messageList() { $message=$this->message->selectMessageByEachUser(); return new MessageCollection($message); }どうせチャットルームグループは必要なら、グループに入るユーザーのIDと最新メッセージを保存するチャットルームのテーブルを作る方がいいかも?
メーセージを送信する際、新しいメッセージをテーブルに保存し、後処理はなしで、効率は上がります。今は勉強でLaravelとVue.jsで質問回答アプリを実装しています。
ソースコードは以下に公開:
https://github.com/joychoinjapan/syukudai.net
興味があれば、ご覧ください。
- 投稿日:2020-06-02T03:15:05+09:00
[docker-compose, laravel, Xdebug, VSCode, mac]ようやくブレークポイントで止まった
ようやく止まった
ようやく止まった・・
こんにちはkamotetuと申します
普段仕事ではPhpStormというエディタで作業しているのですが、自宅ではVSCodeを使用しています
それでようやくVSCodeでブレークポイントで止まってくれたので記事にしたいと思いますというても
https://qiita.com/gigosa/items/90431be7a6a79db78480
を参考に(ほとんど同じ)でやったので、設定などは↑の記事を参考にしてください(いや本当助かりました)じゃあお前なんなん?
て感じですが、実際に止まったときのVSCodeの状況を含めて紹介します
os:mac
自分のディレクトリ構成
(記事に必要な分だけ記載します)app //<- この中にlaravelのファイル郡が入ってます docker ┗ php ┝ Dockerfile ┗ php.ini docker-compose.ymlとりあえず
紹介した記事のとおりやっていきます
Dockerfileを作成
自分は
FROM php:7.3-apache-stretch RUN apt-get update && \ apt-get install -y libzip-dev zlib1g-dev sudo nano && \ docker-php-ext-install mysqli pdo_mysql zip && \ a2enmod rewrite RUN pecl install xdebug \ && docker-php-ext-enable xdebugこんな感じで作成しました
docker-compose.ymlを作成
docker-compose.ymlversion: "3.4" services: app: build: context: . dockerfile: ./docker/php/Dockerfile restart: always volumes: - ./docker/php/php.ini:/usr/local/etc/php/php.ini - ./app:/var/www/html/ ports: - 8080:80 depends_on: - mysql - mail mysql: image: mysql:5.7 restart: always volumes: - ./docker/mysql/data:/var/lib/mysql command: - --sql-mode=NO_ENGINE_SUBSTITUTION environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=${DB_DATABASE} - MYSQL_USER=${DB_USERNAME} - MYSQL_PASSWORD=${DB_PASSWORD} phpmyadmin: image: phpmyadmin/phpmyadmin restart: always volumes: - ./docker/phpmyadmin/sessions:/sessions environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=${DB_USERNAME} - PMA_PASSWORD=${DB_PASSWORD} ports: - 4040:80 depends_on: - mysql mail: image: mailhog/mailhog restart: always ports: - "8025:8025"mysql以下は今回無視してください
php.ini作成
php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = Off mbstring.detect_order = auto display_errors = On upload_max_filesize = 20M post_max_size = 20M max_execution_time = 1200 memory_limit = 512M [xdebug] xdebug.remote_enable=1 xdebug.remote_autostart=1 xdebug.remote_host=host.docker.internal xdebug.remote_port=9000 //<-記事では9001になっています xdebug.remote_log=/tmp/xdebug.log[xdebug]以下は記事のコピペ
VSCodeの設定
ひとまずPHP Debugをインストール(画面ではインストール済)
自分のVSCodeではこんなアイコン
バージョン?によっては違うアイコンになってると思いますが、明らか虫だろってアイコンがあればそれと同じです(多分)
これをクリックすると、「~~~.jsonを作成」というリンク?が表示されるのでそれをクリック(画像撮り忘れてしまいましたすいません)launch.jsonを編集
クリックした先にlaunch.json{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000, }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "port": 9000 }, //上はもともと作成されている(はず) //以下は記事のコピペ { "name": "XDebug on docker", "type": "php", "request": "launch", "port": 9000, //<- php.iniのxdebug.remote_portと同じポート番号 "pathMappings": { "/var/www/html":"/Users/ユーザーの名前/Documents/my_app/laravel_app/app/app" <- dockerのルートディレクトリとアプリケーションのローカルルートディレクトリを設定します } } ] }とりあえずこれで設定は完了
実際に止まらせる
*ここからは自分が適当にやってできた内容なのでスマートな方法かわかりません!
虫のアイコンをクリックすると↑のような画面になりますが、画像のように「Xdebug on docker」を選択してください
で、その左にある再生ボタンをクリックすると
こんなメニューが表示されます
適当な位置にブレークポイントを設定します(コードの行番号の左にカーソルを持っていくと選択できます。あと、箇所によっては止まらないかも)
この状態でブラウザでブレークポイントを通過する処理を実行します
(自分のルーティングでは「http://localhost:8080/public/article/store」)
するとこんな感じで止まってくれました
ありがたや
止まらなかったら
止まるまでいろんな記事を参考にトライするのみです!
おやすみなさい