Laravel по-русски

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

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

#1 17.10.2016 04:07:11

Углубленный быстрый старт

Добрый день.

Начинаю изучать, ничего не понимаю пока. Прочитал "Углубленный быстрый старт" , потом про сервис контейнеры и поставщики услуг. Вернулся к углубленному старту, скачал себе локально, чтобы разобраться.

Про удаление задачи пишут, что в "app/Providers/RouteServiceProvider.php в методе boot()" надо добавить строку:

$router->model('task', 'App\Task');

Но там такой строки нет, тем не менее в метод destroy() контроллера TaskController передается экземпляр App/Task как он туда попадает?

То-же самое касается и внедрения TaskRepository в конструктор этого-же контроллера.

Ни в одном из провайдеров, зарегистрированных в config/app.php нет упоминаний об App/Task (только в AuthServiceProvider регистрация TaskPolicy), ни TaskRepository.

В разделе Маршрутизация (глава - Привязка модели) рассказывается про внедрение, но вот как выглядит RouteServiceProvider, скачанный из GitHub к главе Углубленный быстрый старт:

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    {
        //

        parent::boot($router);
    }

    /**
     * Define the routes for the application.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function map(Router $router)
    {
        $router->group(['namespace' => $this->namespace], function ($router) {
            require app_path('Http/routes.php');
        });
    }
}

Короче - ничего не понимаю sad

Не в сети

#2 17.10.2016 10:41:48

Re: Углубленный быстрый старт

Вы имеете ввиду перевод гайда для продвинутых? На самом деле, там все более-менее ясно, если только есть понимание ООП. Лучше всего, пожалуй, Мэтт Зандстра подойдет, в сети скачать можно без проблем. И это, я сам новичок, если что :-)

Не в сети

#3 18.10.2016 05:30:51

Re: Углубленный быстрый старт

Да, в гайде все понятно, кроме этого момента (ну и что гайд не совпадает с исходным кодом на гитхабе, т.к. указанной в гайде привязки в сервис контейнер модели - нет, это как минимум). Совершенно не понятно, как сервис-контейнер внедряет туда экземпляры этих классов, т.к. они нигде не описаны как это в гайдах описано, дабы внедряться автоматом. Просто объявлены в качестве параметров методов и каким-то образом туда передаются.

Спасибо за наводку на книгу. Хотя это странно, что для того, чтобы пользоваться фреймворком надо прочитать какие-то книги дополнительные. С Kohana и YII достаточно было прочитать официальную документацию, чтобы уверенно использовать в работе (хотя да, согласен много чего в книгах полезного, не очевидного бывает). Но чтобы узнать как работает базовый функционал (а не рецепты какие-либо) - читать дополнительную литературу...

Короче, как я понимаю - как это работает не знает ни кто. Магия... smile

Не в сети

#4 18.10.2016 06:15:47

Re: Углубленный быстрый старт

Ради интереса решил обратиться к первоисточнику. Ссылка на гитхабе, на документацию не работает. Оказалось, что последняя версия этого гайда написана к версии Laravel 5.1.

Там все то-же самое, что и в переведенной версии. А вот в самих исходниках внесены изменения в связи с приведением к текущей версии Laravel, где из app/Providers/RouteServiceProvider.php строка $router->model('task', Task::class); в методе boot удалена. Куда она перенесена и как это теперь работает - не понятно.

Интересно, планируется ли перевод доки на Laravel 5.3? Ибо с аглицким к стыду своему - не очень хорошо.

Не в сети

#5 18.10.2016 06:44:21

Re: Углубленный быстрый старт

Есть документация для 5.2 на laravel.su - точно.
Возможно, и для 5.3 на github, хотя гайды вряд-ли успели перевести.
А что касается уверенного использования в работе, то, я думаю, можно и не читать про сервис-контейнеры. Вы же сами "полезли" на этот уровень.

Не в сети

#6 18.10.2016 06:58:17

Re: Углубленный быстрый старт

Androbim пишет:

Есть документация для 5.2 на laravel.su - точно.
Возможно, и для 5.3 на github, хотя гайды вряд-ли успели перевести.
А что касается уверенного использования в работе, то, я думаю, можно и не читать про сервис-контейнеры. Вы же сами "полезли" на этот уровень.

Так там-же все крутится вокруг этих сервис-провайдеров, говорят, что это чуть ли не самая главная фишка (где-то читал). Да и надо понимать как оно работает, чтобы использовать максимально все возможности. Можно конечно и старый-добрый new App\Task() использовать, но тогда зачем это все? big_smile

Не в сети

#7 18.10.2016 07:17:53

Re: Углубленный быстрый старт

Ну так в чем проблема? Если хотите "понимать, как оно работает" и "использовать максимально все возможности", нужно глубокое понимание основ. А если этого нет, то "использовать максимально все возможности" даже на CMS не получится. Но работать можно.
Прочтите книжку Мэтта Зандстры. После, примерно, 80-й страницы, вопросы про сервис-контейнер и репозиторий (лично я так думаю! :-)), отпадут.

Изменено Androbim (18.10.2016 07:18:26)

Не в сети

#8 19.10.2016 03:16:55

Re: Углубленный быстрый старт

Нашел вроде, как оно работает. В доке на 5.3 в разделе сервис-контейнера написано:

There is no need to bind classes into the container if they do not depend on any interfaces. The container does not need to be instructed on how to build these objects, since it can automatically resolve these objects using reflection.

Т.е. при помощи рефлексии контейнер автоматически понимает, что требуется методу контроллера и передает туда нужные данные.

Не в сети

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