Задать вопрос
@lynnikvadim

Ошибка при создании своеди провайдера в Laravel 5?

Я так понял что свои функции можно записывать в провайдер.
Создал Провайдер :
<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class MapsServiceProvider extends ServiceProvider {

	/**
	 * Bootstrap the application services.
	 *
	 * @return void
	 */
	public function boot()
	{
		 
	}

	/**
	 * Register the application services.
	 *
	 * @return void
	 */
	public function register()
	{
		 
	}

}

class Maps extends ServiceProvider
{
    public static function location($address)
    {
        $obj = null;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($address) .  '&sensor=true_or_false&region=ru');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);

        $output = curl_exec($ch);

        if ($output !== false)
        {
            if ($location = json_decode($output))
            {
                if ($location->status == 'OK')
                    $obj = $location->results[0]->geometry->location;
            }
        }

        curl_close($ch);
        return $obj;
    }
}

Прописал в app.php
'providers' => [				
				'App\Providers\MapsServiceProvider',
	],

Когда в контроллере пишу 'coords' => Maps::location($address)
Получаю ошибку:
Class App\Providers\Maps contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Illuminate\Support\ServiceProvider::register)

В чем может быть проблема ?
Спасибо.
  • Вопрос задан
  • 195 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
saggid
@saggid
Веб-Программист
1. Зачем вы засунули сюда два класса? Или это просто для краткости приведено?
2. Вам же человеческим языком PHP сообщает: класс App\Providers\Maps содержит один абстрактный метод и должен быть либо объявлен тоже абстрактным, либо он должен до конца реализовать все оставшиеся методы.

Короче, зачем вы класс Maps тоже расширяете от ServiceProvider'а? Не надо его расширять от него. Изучайте ООП )

Вообще, что-то я не понял тут логику в вашем коде. Если вам захотелось просто функцию в каком-то своём классе статическую создать - так создайте просто обычный класс, не надо делать никаких ServiceProvider'ов. Сервис провайдеры создают для того, чтобы расширить логику работы фреймворка.
Ответ написан
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Ругается на то, что у вас что-то из наследуемого класса не описано.
Проверьте родительский класс ServiceProvider и посмотрите материалы по теме: www.quizful.net/interview/php/abstract-class-inter...
Ответ написан
Комментировать
ajaxtelamonid
@ajaxtelamonid
Laravel
Сервис-провайдеры нужны не для написания функционала, а для инициализации различных частей вашего приложения. Сделай обычный класс, размести где-нить в неймспейсе, и вызывай из контроллера/других классов обычным способом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы