Weather Api Project
- Для установки laravel проекта использовал консольную команду (при установленном composer)
composer create-project laravel/laravel weather_api --prefer-dist
- Для развертывание этого проекта на другой машине следует склонировать файлы с этого репозитория:
- прописать в консоли команду
composer install
; - переименовать .env.example в .env;
- заменить путь и доступы к вашей базе данных;
- прописать в консоли команду
- Для удаление ненужной в данном проекте frontend части использовал команду
php artisan preset none
- Создал базу данных weather_api, прописал подключение к бд в файле .env
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=weather_db DB_USERNAME=root DB_PASSWORD=
- Создал модель Weather и миграцию для нее командой
php artisan make:model Weather -m
- Заполнил поля в миграции таким образом:
и мигрировал командойSchema::create('weathers', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('city'); $table->integer('temperature'); $table->integer('humidity'); $table->integer('wind_speed'); $table->timestamps(); });
php artisan migrate
-
Добавил атрибут fillable для модели Weather
class Weather extends Model { protected $fillable = ['city', 'temperature', 'humidity', 'wind_speed']; }
-
Добавил два роута в api.php для получения всех данных о погоде
и для получения погоды по конкретному городу
Route::get('weather', function() { return Weather::all(); });
Route::get('weather/{city}', function($city) { return Weather::where('city', $city) -> first(); });
-
Создал контроллер командой
php artisan make:controller WeatherController
-
В контроллере прописал два метода index и show для получения всей погоды и по городу соответственно
class WeatherController extends Controller { public function index() { return Weather::all(); } public function show($city) { return Weather::where('city', $city) -> first(); } }
-
После этого убрал логику из роута в файле api.php
Route::get('weather', 'WeatherController@index'); Route::get('weather/{city}', 'WeatherController@show');