За последние 24 часа нас посетили 68557 программистов и 10347 роботов. Сейчас ищут 2573 программиста ...

А где функция config(), если мы ещё не подключили хелперы? :)

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 13 ноя 2022.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    PHP:
    1. <?php namespace browner12\helpers;
    2.  
    3. use Illuminate\Support\ServiceProvider;
    4.  
    5. class HelperServiceProvider extends ServiceProvider
    6. {
    7.     /**
    8.      * register the service provider
    9.      *
    10.      * @return void
    11.      */
    12.     public function register()
    13.     {
    14.         //register commands
    15.         $this->commands([
    16.             Commands\HelperMakeCommand::class,
    17.         ]);
    18.  
    19.         //include the active package helpers
    20.         foreach (config('helpers.package_helpers', []) as $activeHelper) {
    21.  
    22.             $file = __DIR__ . '/Helpers/' . $activeHelper . '.php';
    23.  
    24.             if (file_exists($file)) {
    25.                 require_once($file);
    26.             }
    27.         }
    28.  
    29.         //load custom helpers with a mapper
    30.         if (count(config('helpers.custom_helpers', []))) {
    31.  
    32.             foreach (config('helpers.custom_helpers', []) as $customHelper) {
    33.  
    34.                 $file = app_path() . '/' . $this->getHelpersDirectory() . '/' . $customHelper . '.php';
    35.  
    36.                 if(file_exists($file)) {
    37.                     require_once($file);
    38.                 }
    39.             }
    40.         }
    41.  
    42.         //load custom helpers automatically
    43.         else {
    44.  
    45.             //include the custom helpers
    46.             foreach (glob(app_path() . '/' . $this->getHelpersDirectory() . '/*.php') as $file) {
    47.                 require_once($file);
    48.             }
    49.         }
    50.     }
    51.  
    52.     /**
    53.      * boot the service provider
    54.      *
    55.      * @return void
    56.      */
    57.     public function boot()
    58.     {
    59.         //publish configuration
    60.         $this->publishes([
    61.             __DIR__ . '/config/helpers.php' => config_path('helpers.php'),
    62.         ], 'config');
    63.     }
    64.  
    65.     /**
    66.      * get the directory the helpers are stored in
    67.      *
    68.      * @return mixed
    69.      */
    70.     public function getHelpersDirectory()
    71.     {
    72.         return config('helpers.directory', 'Helpers');
    73.     }
    74. }
    После else мы подключаем custom helpers, а если мы их ещё только подключаем, то откуда у нас config(), app_path(), config_path()?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1.     \Helpers :: class => static function ( ContainerInterface $container ): bool
    2.     {
    3.         foreach ( glob ( $container -> get( 'repository' ) -> get( 'app.system.directory.helpers' ) . '*.php' ) AS $helper )
    4.         {
    5.             require_once $helper;
    6.         }
    7.      
    8.         app( $container -> get( 'app' ) );
    9.      
    10.         return true;
    11.     },
    --- Добавлено ---
    Могу весь стек ОТ и ДО расписать работы фреймворков на общих принципах
     
    Вероломство нравится это.
  3. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    @MouseZver если честно ерунда какая-то, подключили хелперы, чтобы с их помощью подключить хелперы, ок, понятно :)
    --- Добавлено ---
    я этим и занимаюсь: колупаю разные, смотрю реализации
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    Подключаешь их РАЗ, после еще сейвишь единую точку приложения в главный Helper "app", чтобы только потом использовать Помощь.
    Не путай то что ты в начале написал - а в коде ты написал "использовали хелперы, чтобы с их помощью подключить хелперы"
     
  5. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    ну так сначала подключили хелперы, а потом в провайдере подключили ещё одни хелперы, используя уже подключенные: config(), app_path(), config_path(), так же
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    почему у тебя два раза подключаются хелперы.
     
  7. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    почему у меня?

    в том коде что в вопросе я читаю подключение хелперов в провайдере, но в провайдере уже используются хелперы, значит хелперы подключаются какими-то пачками

    у меня сейчас такая же ситуация: я собираю конфиги в контейнер, в этих конфигах есть массив провайдеров)))

    я хочу провайдером собрать Config::class, но не могу обойти массив провайдеров при помощи Config->get('providers'), потому что Config ещё не собран)))

    массив конфигов прилетает в конструктор Config из контейнера, мне чтобы собрать все провайдеры, то нужно обойти массив container->get('provider'), отсюда возникает вопрос: а нахрена мне тогда Config, если я из достаю массив провайдеров - контейнером)))

    PHP:
    1. public function __construct(Container $container)
    2. {
    3.     $this->container = $container;
    4.  
    5.     $providers = array_map(function ($provider) {
    6.         return new $provider($this);
    7.     }, config('providers')); // ну и откуда у меня хелпер config(), если я ещё не собрал хелперы в провайдере
    8.     // или зачем мне тогда собирать Config::class если у меня есть config()
    9.     array_walk($providers, function (Provider $provider) {
    10.         return $provider->register();
    11.     });
    12.  
    13.     array_walk($providers, function (Provider $provider) {
    14.         return $provider->boot();
    15.     });
    16. }
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    Есть заранее загруженные системные Хелперы, а есть "твои"
     
    Вероломство нравится это.
  9. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    да-да, я уже догнал, а то немного тормозил сначала, спс
    --- Добавлено ---
    @MouseZver ok, я понял суть