Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Отложенные провайдеры » 05.06.2017 16:15:52

constb пишет:

потому что объект создаётся коллбэком, а не в момент регистрации. когда ты запрашиваешь этот объект из сервис-контейнера, выполняется коллбэк и вуаля

ок, немного изменил пример:

class SaveStrServiceProvider extends ServiceProvider
{
	protected $defer = true;
	
    public function boot()
    {
        //
    }

    public function register()
    {
		dd(1);
		App::bind('App\Helpers\Contracts\SaveStr', function(){
			return new SaveEloquent();
		});
	}
	
	 public function provides()
	{
	  return ['App\Helpers\Contracts\SaveStr'];
	}
}

В данном случае коллбэки нипричем, т.к. перенес dd(1) выше. Как написано по ссылке из документации: "вы можете отложить регистрацию до момента, когда одна из этих привязок будет запрошена из сервис-контейнера. " Я создал "отложенный" провайдер, указав свойство $defer и метод provides(). Все равно работа скрипта прерывается, хотя метод register() не должен срабатывать пока нет запроса к App\Helpers\Contracts\SaveStr. Выходит, что регистрация проходит в любом случае, почему?

#2 Laravel 5.x » Отложенные провайдеры » 05.06.2017 11:45:49

Arni
Ответов: 3

Пытаюсь создать отложенный сервис-провайдер как в данной статье:
https://laravel.ru/docs/v5/providers#отложенные

код моего сервис-провайдера выглядит следующим образом:

class SaveStrServiceProvider extends ServiceProvider
{
	protected $defer = true;
	
    public function boot()
    {
        //
    }

    public function register()
    {
		App::bind('App\Helpers\Contracts\SaveStr', function(){
			dd(1);
			return new SaveEloquent();
		});
	}
	
	 public function provides()
	{
	  return ['App\Helpers\Contracts\SaveStr'];
	}
}

В данном коде я использовал
$defer = true;
и
public function provides()
для отложенного создания объекта своего класса SaveEloquent()
Так же в код анонимной функции поместил вызов dd(1) что должно прервать выполнение так же как и exit(1).

Так вот в чем вопрос - в данном случае, объект SaveEloquent() действительно не создается пока я в коде контроллера (например) не обращусь к своему классу (например через внедрение зависимости). Когда вызову методы класса, тогда выполнение прервется и отобразится "1".
Но! Если я не использую все эти примочки для создания отложенного провайдера $defer = true и public function provides() - результат такой же - объект не создается, пока к нему не будет обращения. Почему так?

#3 Re: Laravel 5.x » Получить URL предыдущей страницы. » 30.05.2017 22:21:29

Вопрос закрыт:
Redirect::back()->getTargetUrl();

P.S. Админ - сделай чтоб можно было удалять свои темы без ответов.

#4 Laravel 5.x » Получить URL предыдущей страницы. » 30.05.2017 22:16:06

Arni
Ответов: 2

Нужно получить URL предыдущей страницы.
На php это $_SERVER['HTTP_REFERER'], в Laravel есть способ получить своими средствами?

Максимум удалось получить объект который содержит нужные данные:
Redirect::back()
но вытащить защищенное свойство не получается.

#5 Re: Laravel 5.x » Валидация форм » 14.05.2017 23:17:56

Разобрался, нужно было добавить правило "integer" перед диапазоном, иначе считает кол-во символов.
'age'=>'required|integer|between:5,50',
P.S. Почему-то удалить свое сообщение не получается.

#6 Re: Laravel 5.x » Валидация форм » 14.05.2017 22:56:25

Подскажите как создать простое правило валидации наподобии:
'age'=>'required|between:3,5',
Нужно разрешить ввод чисел в диапазоне от 5 до 50.

Подвал раздела