Как исправить ошибку php "не удается передать параметр 1 по ссылке"?

Как исправить ошибку php "не удается передать параметр 1 по ссылке"?

12.11.2019 09:44:26 Просмотров 33 Источник

Я знаю, что на stackoverflow было много подобных проблем с этой ошибкой, но никто не решает мою проблему. У меня есть функция в high_contrast.moduleфайл модуля:

function high_contrast_install() {
  $background = \Drupal::config('high_contrast.settings')->get('colors_background');
  $text = \Drupal::config('high_contrast.settings')->get('colors_text');
  $hyperlinks = \Drupal::config('high_contrast.settings')->get('colors_hyperlinks');

  \Drupal::service('file_system')->prepareDirectory(HIGH_CONTRAST_CSS_FOLDER, FileSystemInterface::CREATE_DIRECTORY); // LINE 17!!!
  $css = _high_contrast_build_css();
  file_save_data($css, HIGH_CONTRAST_CSS_LOCATION, FileSystemInterface::EXISTS_REPLACE);
}

и когда я хочу установить модуль, у меня есть ошибка en:

Error: Cannot pass parameter 1 by reference in high_contrast_install() (line 17 of modules\high_contrast\high_contrast.install).

Как я могу это исправить? :(

Строка 17 заключается в том, что один:

  \Drupal::service('file_system')->prepareDirectory(HIGH_CONTRAST_CSS_FOLDER, FileSystemInterface::CREATE_DIRECTORY);
У вопроса есть решение - Посмотреть?

Ответы - Как исправить ошибку php "не удается передать параметр 1 по ссылке"? / How to fix php error "Cannot pass parameter 1 by reference"?

Является ответом!
EricLavault

13.11.2019 12:33:54

Как следует из ошибки, FileSystem::prepareDirectoryпринимает свой первый аргумент по ссылке :

public function prepareDirectory(&$directory, $options = self::MODIFY_PERMISSIONS) {
  # $directory being assigned new value
}

Поэтому PHP выдает ошибку, если вы передаете ему константу :

Константа-это идентификатор (имя) для простого значения. В качестве имени предполагает, что значение не может измениться во время выполнения скрипта

Перед вызовом функции необходимо присвоить переменной постоянное значение :

$dir = HIGH_CONTRAST_CSS_FOLDER;
\Drupal::service('file_system')->prepareDirectory($dir, FileSystemInterface::CREATE_DIRECTORY);
Закрыть X