Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Pavel Pustota
    @kot13
    Метода locateAll() действительно там нет.
    sunsingerus
    @sunsingerus
    Сейчас точно гляну, такой метод должен быть в наследнике.
    а подскажи, почему вот так:
    "callable//$base";
    неправильно, а заменено на
    sprintf('callable//%s', $base);
    ?
    Вроде бы одно и тоже?
    Pavel Pustota
    @kot13
    Оба варианта правильные, но со sprintf считается более кошерным.
    Это почти религиозное.
    sunsingerus
    @sunsingerus
    понятно - личные предпочтения :)
    Pavel Pustota
    @kot13
    Не совсем. Гипотетически sprintf быстрее. Это раз.
    Во-вторых в sprintf будет точное приведение типов. Например, в твоём примере, что будет, если $base = false?
    Хотя не. Гоню. Этот пример не показательный.
    Вот так будет виднее разница:
    "callable//$base";
    sprintf('callable//%d', $base);
    sunsingerus
    @sunsingerus
    в случае "$var" приведется к строке
    в случае sprintf('%d', $var) приведется к int-у
    Если var - int - разницы не будет
    Если var - с буквами - тогда будет разница, приведение к %d откусит буквы-то.
    Pavel Pustota
    @kot13
    В class FileLocator есть метод, НО! PHPConfigLoader.php отнаследован от FileLoader
    Судя по всему ты не используешь IDE вроде PHPStorm?
    Просто в нём этот метод "светится".
    sunsingerus
    @sunsingerus
    Не понял, что значит "светится"?
    Pavel Pustota
    @kot13
    Подсвечен как ошибка.
    sunsingerus
    @sunsingerus
    хм
    Pavel Pustota
    @kot13
    IDE на лету анализирует код и подсказывает - какие методы доступны, какие нет.
    Очень удобно.
    sunsingerus
    @sunsingerus
    А, у меня netbeans.
    про locateAll()
    этот метод не входит в interface
    а определен в наследнике
    может поэтому?
    но сам-то метод точно есть, хотя бы потому, что
    // locator must be capable of locating all
    if (!is_callable([$this->locator, 'locateAll'])) {
    throw new FileLoaderLoadException("locateAll()");
    }
    проходит нормально
    Pavel Pustota
    @kot13
    Я не вижу где он определён((
    PHPConfigLoader.php отнаследован от Symfony\Component\Config\Loader\FileLoader
    Там нет.
    та кон же не в самом class PHPConfigLoader extends FileLoader
    а у него в $this->locator
    Pavel Pustota
    @kot13
    FileLocator != FileLoader
    sunsingerus
    @sunsingerus
        // locator must be capable of locating all
        if (!is_callable([$this->locator, 'locateAll'])) {
            throw new FileLoaderLoadException("locateAll()");
        }
    Pavel Pustota
    @kot13
    Благодаря этой проверке всё работает.
    sunsingerus
    @sunsingerus
            // Locator to find files
            $locator = new FileLocator($directories);
    
            // Load config file into an array
            $loader = new PHPConfigLoader($locator);
    
            // Import all config sections
            $settings = $loader->importAll();
    т.е. как это мне видится
    у лоадера есть локатор файлов
    у локатора есть метод "нати все"
    class FileLocator extends \Symfony\Component\Config\FileLocator
    {
    /**
     * Returns an array of full paths to all locatable files
     *
     * @return array
     */
    public function locateAll()
    Pavel Pustota
    @kot13
    Всё. Понял. Туплю.
    sunsingerus
    @sunsingerus
    ещё раз перечитал еррор
    The method locateAll() does not exist on Symfony\Component\Config\FileLocatorInterface
    он все-таки прав, интерфейсе действительно нет locateAll()
    надо там, наверное, обставить проверкой на instance of
    но в данном конкретном экземпляре класса (потому что мы-то знаем, какой экземплар создали) такой метод есть!
    Pavel Pustota
    @kot13
    Да, я понял. Не внимательно просмотрел код и пропустил, что $this->locator, а не прямо $this->locateAll()
    sunsingerus
    @sunsingerus
    ага :)
    Pavel Pustota
    @kot13

    Может просто добавлю в класс:

        /**
         * @var FileLocator
         */
        protected $locator;

    ?

    sunsingerus
    @sunsingerus
    давай
    Pavel Pustota
    @kot13
    Закинул в свой пулл-реквест.
    Там много мелких исправлений по кодстайлу (того что анализатор подсказывал)
    Из главного:
    1) Перенёс папки /mail и /lang внутрь /app (ИМХО там им самое место)
    2) partisan runTest теперь будет выводить весь ответ от codecept, а не только последнюю строку
    3) удалил из индекса гита лишние файлы сгенерённые codecept (не знаю как они в гит попали)
    Pavel Pustota
    @kot13
    Вмерджил твой пулл-реквест.
    Есть какие-то замечания по моему пулл-реквесту?
    sunsingerus
    @sunsingerus
    Просмотрел все коммиты - все ок, дополнительных вопросов не возникло. А про строки vs sprintf() мы обсудили дополнительно
    Конечно, запихивание всего в sprintf() немного уменьшает читаемость текстов, но это мелочи
    на мой взгляд - все стало немного лучше, чем было :)