前提・実現したいこと
ローカル環境:
php 7.3.11
Laravel 5.8.13
"vue": "^2.5.17",
"vue-template-compiler": "^2.6.11"
"axios": "^0.19",
phpstorm使っています。
OpenWeather MapのAPIを使って現在の天気情報を取得し画面に表示したいです。
その際、位置情報の緯度と経緯はMySqlから取得して、ユーザーが自由に位置情報を変更できる仕組みにしたいです。
発生している問題・エラーメッセージ
axiosを使ってAPIからデータを取得し、表示するところはできています。
が、位置情報をデータベースから抽出するところが、どうやってできません。
本来であればView(bladeファイル)内でaxios.get('api/weather')をした時に直接URLを指定したかったのですが、
どうやらできないようなので、aip.phpで処理をしています。
Viewコンポーネントファイル (このファイルは特に問題は発生していません)
<template> <div class="weather-posision"> <p><b>登録した地域の現在の天気</b></p> <p class="weather_city">都市:{{ city }}</p> <p class="weather_temp">気温:{{ temp | roundUp }}°C</p> <div class="weather_pic"> <p v-if="condition.main == 'Rain'"><i class="fas fa-umbrella fa-3x"></i></p> <p v-else-if="condition.main == 'Clouds'"><i class="fas fa-cloud fa-3x"></i></p> <p v-else-if="condition.main == 'Clear'"><i class="fas fa-sun fa-3x"></i></p> <p v-else>該当しなかった<i class="fas fa-cloud-sun fa-3x"></i></p> </div> </div> </template> <script> export default { data() { return { city: null, //地域名 temp: null, //気温 condition: { main: null, //天候名 } } }, mounted: function () { axios.get('api/weather') .then(function (response) { this.city = response.data.name this.temp = response.data.main.temp this.condition = response.data.weather[0] }.bind(this)) .catch(function (error) { console.log(error) }) }, filters: { roundUp(value) { return Math.ceil(value); } }//filters }//export default </script>
問題なのは下記コードです
api.php
Route::get('weather', function() { //ログインしているID取得 $userID = Auth::id(); //緯度を取得 $latitude =DB::select('select latitude from users where id = :id',['id' => $userID]); //文字列に変換 $user_latitude = implode(" ",$latitude); //経緯を取得 $longitude =DB::select('select longitude from users where id = :id',['id' => $userID]); //文字列に変換 $user_longitude =implode(" ",$longitude); //APIで取得する時のベースURL $baseurl = 'https://api.openweathermap.org/data/2.5/weather?'; $lat = 'lat='.$user_latitude.'&';//35.770913 緯度 $lon = 'lon='.$user_longitude.'&';//139.896147 経度 $units = 'units=metric&'; $id = 'appid=意図的に伏せています'; $url = $baseurl.$lat.$lon.$units.$id; return file_get_contents($url); });
エラーメッセージ
特にないです。SQL文が空振りしているLOGが出ていました。
試したこと
DBファサードではなく直接緯度と経緯を手入力するとjsonファイルを取得、表示できました。
おそらくですが、api.php(routeファイル)でDBファサードを使うことができないと思われます。
(ちゃんとクラスは読み込んでいます)
分かる方アドバイスをお願いします。
あなたの回答
tips
プレビュー