array:3 [
  "ThemeArticle" => Illuminate\Database\Eloquent\Collection {#343
    #items: array:4 [
      0 => App\Models\ThemeArticle {#344
        #table: "theme_article"
        #connection: "mysql"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "article_id" => 1
          "theme_id" => 2
        ]
        #original: array:2 [
          "article_id" => 1
          "theme_id" => 2
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      1 => App\Models\ThemeArticle {#345
        #table: "theme_article"
        #connection: "mysql"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "article_id" => 2
          "theme_id" => 2
        ]
        #original: array:2 [
          "article_id" => 2
          "theme_id" => 2
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      2 => App\Models\ThemeArticle {#346
        #table: "theme_article"
        #connection: "mysql"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "article_id" => 3
          "theme_id" => 2
        ]
        #original: array:2 [
          "article_id" => 3
          "theme_id" => 2
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      3 => App\Models\ThemeArticle {#347
        #table: "theme_article"
        #connection: "mysql"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "article_id" => 4
          "theme_id" => 2
        ]
        #original: array:2 [
          "article_id" => 4
          "theme_id" => 2
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
    ]
  }
  "articles" => Illuminate\Database\Eloquent\Collection {#1062
    #items: array:3 [
      0 => App\Models\Articles {#1061
        #connection: "mysql"
        #table: "articles"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:14 [
          "id" => 1
          "lang" => "ru"
          "active" => 1
          "active_from" => "2021-02-12 16:46:16"
          "sort" => 100
          "name" => "Artisan создание контроллеров, моделей, миграций"
          "code" => "artisan-sozdanie-kontrollerov-modeley-migraciy"
          "preview_text" => "Artisan создание контрллеров, моделей, миграций"
          "preview_picture" => ""
          "detail_text" => """
            <p>\r\n
            Cоздание контрллера страницы статей<br />\r\n
            <code>php artisan make:controller Pages/ArticlesController</code>\r\n
            </p>\r\n
            <p>\r\n
            Создание миграции для статей<br />\r\n
            <code>php artisan make:migration create_articles_table</code>\r\n
            </p>
            """
          "detail_picture" => ""
          "show_counter" => 36
          "created_at" => null
          "updated_at" => "2021-05-15 04:59:53"
        ]
        #original: array:14 [
          "id" => 1
          "lang" => "ru"
          "active" => 1
          "active_from" => "2021-02-12 16:46:16"
          "sort" => 100
          "name" => "Artisan создание контроллеров, моделей, миграций"
          "code" => "artisan-sozdanie-kontrollerov-modeley-migraciy"
          "preview_text" => "Artisan создание контрллеров, моделей, миграций"
          "preview_picture" => ""
          "detail_text" => """
            <p>\r\n
            Cоздание контрллера страницы статей<br />\r\n
            <code>php artisan make:controller Pages/ArticlesController</code>\r\n
            </p>\r\n
            <p>\r\n
            Создание миграции для статей<br />\r\n
            <code>php artisan make:migration create_articles_table</code>\r\n
            </p>
            """
          "detail_picture" => ""
          "show_counter" => 36
          "created_at" => null
          "updated_at" => "2021-05-15 04:59:53"
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      1 => App\Models\Articles {#655
        #connection: "mysql"
        #table: "articles"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:14 [
          "id" => 2
          "lang" => "ru"
          "active" => 1
          "active_from" => "2021-02-12 17:18:11"
          "sort" => 100
          "name" => "Изменение расположения директории "public""
          "code" => "izmenenie-raspolozheniya-direktorii-public"
          "preview_text" => """
            /public/index.php\r\n
            /config/fylesystems.php\r\n
            /server.php
            """
          "preview_picture" => ""
          "detail_text" => """
            /public/index.php\r\n
            /config/fylesystems.php\r\n
            /server.php
            """
          "detail_picture" => ""
          "show_counter" => 41
          "created_at" => null
          "updated_at" => "2021-05-15 05:22:20"
        ]
        #original: array:14 [
          "id" => 2
          "lang" => "ru"
          "active" => 1
          "active_from" => "2021-02-12 17:18:11"
          "sort" => 100
          "name" => "Изменение расположения директории "public""
          "code" => "izmenenie-raspolozheniya-direktorii-public"
          "preview_text" => """
            /public/index.php\r\n
            /config/fylesystems.php\r\n
            /server.php
            """
          "preview_picture" => ""
          "detail_text" => """
            /public/index.php\r\n
            /config/fylesystems.php\r\n
            /server.php
            """
          "detail_picture" => ""
          "show_counter" => 41
          "created_at" => null
          "updated_at" => "2021-05-15 05:22:20"
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      2 => App\Models\Articles {#1023
        #connection: "mysql"
        #table: "articles"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:14 [
          "id" => 4
          "lang" => "ru"
          "active" => 1
          "active_from" => "2021-02-14 12:18:11"
          "sort" => 100
          "name" => "Фоновый вывод "View Composer""
          "code" => "fonovyy-vyvod-view-composer"
          "preview_text" => "Вывод какой либо динамической информации на всех или многих страницах "
          "preview_picture" => ""
          "detail_text" => """
            <p>View Composers будет кстати, когда какие-то данные являются общими для для многих или вообще всех страниц. Примеры: навигация или блок с популярными статьями и т.п. Именно для таких случаев в Laravel предусмотрено элегантное решение.<p>\r\n
            \r\n
            <p>Создадим ежестраничный вывод списка статей. Создаем в директории <code>resources/views/layouts/articles.blade.php</code>. Включим этот файл в шаблон следующим образом:</p>\r\n
            \r\n
            <code>\r\n
            @include('layouts.articles')\r\n
            </code>\r\n
            <br />\r\n
            \r\n
            <p>\r\n
            Что касается передачи данных – есть несколько вариантов. Примитивнейшее решение "в лоб" – просто-напросто дублировать фетчинг данных в каждом контроллере, что совершенно не кошерно. Второй вариант – изобретать какие-то свои велосипеды, дабы избежать дублирования кода. Но зачем? Ведь есть третий вариант - уже готовое решение в Laravel, которым и воспользуемся.\r\n
            </p>\r\n
            \r\n
            <p>Создадим поставщика услуг командой в консоли:</p>\r\n
            \r\n
            <code>\r\n
            php artisan make:provider ComposerServiceProvider\r\n
            </code>\r\n
            <br />\r\n
             \r\n
            \r\n
            <p>И сразу добавим его в массив providers файла конфигурации config/app.php:</p>\r\n
            \r\n
            <code>\r\n
            ...\r\n
            \r\n
            'providers' => [\r\n
                ...\r\n
                /*\r\n
                 * Application Service Providers...\r\n
                 */\r\n
                App\Providers\AppServiceProvider::class,\r\n
                App\Providers\AuthServiceProvider::class,\r\n
                App\Providers\EventServiceProvider::class,\r\n
                App\Providers\RouteServiceProvider::class,\r\n
            \r\n
            ],\r\n
            \r\n
            ...\r\n
            </code>\r\n
            \r\n
            <br />\r\n
             \r\n
            <p>\r\n
            Далее переходим в созданный нами app/Providers/ComposerServiceProvider.php и добавляем следующее (исходим из предположения, что у нас имеется модель MenuItem):\r\n
            </p>\r\n
            \r\n
            <code>\r\n
            <?php\r\n
            \r\n
            namespace App\Providers;\r\n
            \r\n
            use Illuminate\Support\Facades\View;\r\n
            use Illuminate\Support\ServiceProvider;\r\n
            use App\MenuItem;\r\n
            \r\n
            class ComposerServiceProvider extends ServiceProvider\r\n
            {\r\n
                public function boot()\r\n
                {\r\n
                    View::composer('layouts.partials.nav', function($view) {\r\n
                        $view->with(['menuitems' => MenuItem::get()]);\r\n
                    });\r\n
                }\r\n
            \r\n
                public function register()\r\n
                {\r\n
                    //\r\n
                }\r\n
            }\r\n
            </code>\r\n
            \r\n
             \r\n
            <p>\r\n
            Прозрачнее некуда, но всё же: первый аргумент – это представление, в которое мы передаём данные, а второй – колбэк, в котором мы, собственно, и указываем, какие данные передаём. Если же нужно отправить данные в несколько представлений, тогда первым аргументом будет массив. Т.е. этот кусок кода мог бы выглядеть, например, так:\r\n
            </p>\r\n
            \r\n
            <code>\r\n
            View::composer(['layouts.partials.nav', 'layouts.partials.footer'], function($view) {\r\n
                $view->with(['menuitems' => MenuItem::get()]);\r\n
            });\r\n
            </code>\r\n
            \r\n
             \r\n
            \r\n
            Если же данные нужны во всех вью, то первый аргумент будет таким: '*'.\r\n
            \r\n
            Казалось бы, можно было бы сказать that’s it, но предлагаю пойти ещё немного дальше, ведь метод composer() может принимать не только колбэк, но и класс. Давайте посмотрим и на этот вариант. В app/Http создадим директорию ViewComposers, и в ней файл NavigationComposer.php со следующим содержимым:\r\n
            \r\n
            <?php\r\n
            \r\n
            namespace App\Http\ViewComposers;\r\n
            \r\n
            use App\MenuItem;\r\n
            use Illuminate\View\View;\r\n
            \r\n
            class NavigationComposer\r\n
            {\r\n
                public function compose(View $view)\r\n
                {\r\n
                    return $view->with('mainitems', MenuItem::get());\r\n
                }\r\n
            }\r\n
            PHPCopy\r\n
             \r\n
            \r\n
            Поскольку теперь мы используем класс, следует подкорректировать и файл ComposerServiceProvider.php. Ну и чтобы показать, что "можно и так", давайте вместо фасада представления использовать функцию-хелпер view():\r\n
            \r\n
            <?php\r\n
            \r\n
            namespace App\Providers;\r\n
            \r\n
            use Illuminate\Support\ServiceProvider;\r\n
            use App\Http\ViewComposers\NavigationComposer;\r\n
            use App\MenuItem;\r\n
            \r\n
            class ComposerServiceProvider extends ServiceProvider\r\n
            {\r\n
                public function boot()\r\n
                {\r\n
                    view()->composer('layouts.partials.nav', NavigationComposer::class);\r\n
                }\r\n
            \r\n
                public function register()\r\n
                {\r\n
                    //\r\n
                }\r\n
            }\r\n
            PHPCopy\r\n
             \r\n
            \r\n
            Просто и красиво. Напоследок скажу, что лично я редко пользуюсь колбэками, поскольку не всегда мы только "достаём" данные - порой требуются различные проверки. И, если в поставщике мы передаём данные в различные вью, его код быстро разрастается, становясь менее читабельным. Поэтому предпочитаю использовать классы.
            """
          "detail_picture" => ""
          "show_counter" => 54
          "created_at" => null
          "updated_at" => "2021-05-15 05:35:32"
        ]
        #original: array:14 [
          "id" => 4
          "lang" => "ru"
          "active" => 1
          "active_from" => "2021-02-14 12:18:11"
          "sort" => 100
          "name" => "Фоновый вывод "View Composer""
          "code" => "fonovyy-vyvod-view-composer"
          "preview_text" => "Вывод какой либо динамической информации на всех или многих страницах "
          "preview_picture" => ""
          "detail_text" => """
            <p>View Composers будет кстати, когда какие-то данные являются общими для для многих или вообще всех страниц. Примеры: навигация или блок с популярными статьями и т.п. Именно для таких случаев в Laravel предусмотрено элегантное решение.<p>\r\n
            \r\n
            <p>Создадим ежестраничный вывод списка статей. Создаем в директории <code>resources/views/layouts/articles.blade.php</code>. Включим этот файл в шаблон следующим образом:</p>\r\n
            \r\n
            <code>\r\n
            @include('layouts.articles')\r\n
            </code>\r\n
            <br />\r\n
            \r\n
            <p>\r\n
            Что касается передачи данных – есть несколько вариантов. Примитивнейшее решение "в лоб" – просто-напросто дублировать фетчинг данных в каждом контроллере, что совершенно не кошерно. Второй вариант – изобретать какие-то свои велосипеды, дабы избежать дублирования кода. Но зачем? Ведь есть третий вариант - уже готовое решение в Laravel, которым и воспользуемся.\r\n
            </p>\r\n
            \r\n
            <p>Создадим поставщика услуг командой в консоли:</p>\r\n
            \r\n
            <code>\r\n
            php artisan make:provider ComposerServiceProvider\r\n
            </code>\r\n
            <br />\r\n
             \r\n
            \r\n
            <p>И сразу добавим его в массив providers файла конфигурации config/app.php:</p>\r\n
            \r\n
            <code>\r\n
            ...\r\n
            \r\n
            'providers' => [\r\n
                ...\r\n
                /*\r\n
                 * Application Service Providers...\r\n
                 */\r\n
                App\Providers\AppServiceProvider::class,\r\n
                App\Providers\AuthServiceProvider::class,\r\n
                App\Providers\EventServiceProvider::class,\r\n
                App\Providers\RouteServiceProvider::class,\r\n
            \r\n
            ],\r\n
            \r\n
            ...\r\n
            </code>\r\n
            \r\n
            <br />\r\n
             \r\n
            <p>\r\n
            Далее переходим в созданный нами app/Providers/ComposerServiceProvider.php и добавляем следующее (исходим из предположения, что у нас имеется модель MenuItem):\r\n
            </p>\r\n
            \r\n
            <code>\r\n
            <?php\r\n
            \r\n
            namespace App\Providers;\r\n
            \r\n
            use Illuminate\Support\Facades\View;\r\n
            use Illuminate\Support\ServiceProvider;\r\n
            use App\MenuItem;\r\n
            \r\n
            class ComposerServiceProvider extends ServiceProvider\r\n
            {\r\n
                public function boot()\r\n
                {\r\n
                    View::composer('layouts.partials.nav', function($view) {\r\n
                        $view->with(['menuitems' => MenuItem::get()]);\r\n
                    });\r\n
                }\r\n
            \r\n
                public function register()\r\n
                {\r\n
                    //\r\n
                }\r\n
            }\r\n
            </code>\r\n
            \r\n
             \r\n
            <p>\r\n
            Прозрачнее некуда, но всё же: первый аргумент – это представление, в которое мы передаём данные, а второй – колбэк, в котором мы, собственно, и указываем, какие данные передаём. Если же нужно отправить данные в несколько представлений, тогда первым аргументом будет массив. Т.е. этот кусок кода мог бы выглядеть, например, так:\r\n
            </p>\r\n
            \r\n
            <code>\r\n
            View::composer(['layouts.partials.nav', 'layouts.partials.footer'], function($view) {\r\n
                $view->with(['menuitems' => MenuItem::get()]);\r\n
            });\r\n
            </code>\r\n
            \r\n
             \r\n
            \r\n
            Если же данные нужны во всех вью, то первый аргумент будет таким: '*'.\r\n
            \r\n
            Казалось бы, можно было бы сказать that’s it, но предлагаю пойти ещё немного дальше, ведь метод composer() может принимать не только колбэк, но и класс. Давайте посмотрим и на этот вариант. В app/Http создадим директорию ViewComposers, и в ней файл NavigationComposer.php со следующим содержимым:\r\n
            \r\n
            <?php\r\n
            \r\n
            namespace App\Http\ViewComposers;\r\n
            \r\n
            use App\MenuItem;\r\n
            use Illuminate\View\View;\r\n
            \r\n
            class NavigationComposer\r\n
            {\r\n
                public function compose(View $view)\r\n
                {\r\n
                    return $view->with('mainitems', MenuItem::get());\r\n
                }\r\n
            }\r\n
            PHPCopy\r\n
             \r\n
            \r\n
            Поскольку теперь мы используем класс, следует подкорректировать и файл ComposerServiceProvider.php. Ну и чтобы показать, что "можно и так", давайте вместо фасада представления использовать функцию-хелпер view():\r\n
            \r\n
            <?php\r\n
            \r\n
            namespace App\Providers;\r\n
            \r\n
            use Illuminate\Support\ServiceProvider;\r\n
            use App\Http\ViewComposers\NavigationComposer;\r\n
            use App\MenuItem;\r\n
            \r\n
            class ComposerServiceProvider extends ServiceProvider\r\n
            {\r\n
                public function boot()\r\n
                {\r\n
                    view()->composer('layouts.partials.nav', NavigationComposer::class);\r\n
                }\r\n
            \r\n
                public function register()\r\n
                {\r\n
                    //\r\n
                }\r\n
            }\r\n
            PHPCopy\r\n
             \r\n
            \r\n
            Просто и красиво. Напоследок скажу, что лично я редко пользуюсь колбэками, поскольку не всегда мы только "достаём" данные - порой требуются различные проверки. И, если в поставщике мы передаём данные в различные вью, его код быстро разрастается, становясь менее читабельным. Поэтому предпочитаю использовать классы.
            """
          "detail_picture" => ""
          "show_counter" => 54
          "created_at" => null
          "updated_at" => "2021-05-15 05:35:32"
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
    ]
  }
  "themes" => Illuminate\Database\Eloquent\Collection {#1271
    #items: array:3 [
      0 => App\Models\Themes {#1272
        #connection: "mysql"
        #table: "themes"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "id" => 1
          "name" => "Linux"
        ]
        #original: array:2 [
          "id" => 1
          "name" => "Linux"
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      1 => App\Models\Themes {#1273
        #connection: "mysql"
        #table: "themes"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "id" => 2
          "name" => "Laravel"
        ]
        #original: array:2 [
          "id" => 2
          "name" => "Laravel"
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
      2 => App\Models\Themes {#1274
        #connection: "mysql"
        #table: "themes"
        #primaryKey: "id"
        #keyType: "int"
        +incrementing: true
        #with: []
        #withCount: []
        #perPage: 15
        +exists: true
        +wasRecentlyCreated: false
        #attributes: array:2 [
          "id" => 3
          "name" => "Bitrix"
        ]
        #original: array:2 [
          "id" => 3
          "name" => "Bitrix"
        ]
        #changes: []
        #casts: []
        #classCastCache: []
        #dates: []
        #dateFormat: null
        #appends: []
        #dispatchesEvents: []
        #observables: []
        #relations: []
        #touches: []
        +timestamps: true
        #hidden: []
        #visible: []
        #fillable: []
        #guarded: array:1 [
          0 => "*"
        ]
      }
    ]
  }
]