2015-08-29 2 views
0

Как объединить глобальные константы и строки в модели $ actAs массивы в CakePHP 2.6?Конкатенация констант и строк в переменных открытого класса CakePHP

У меня есть плагин для загрузки файлов, которому нужны пути к каталогам, которые передаются ему через конфигурацию $ actAs, но хотя это позволяет мне просто использовать глобальную константу ИЛИ строку как значение ключа массива, она не позволяет мне объединить два вместе. Это проблема, потому что теоретически мое приложение может жить в различных средах, где путь к приложению отличается, и я бы предпочел не иметь это жестко закодированное и вместо этого использовать путь относительно глобальной константы ROOT.

Мне кажется, что я сталкиваюсь с ограничением PHP. Какие хорошие решения для этого? Идеи, ориентированные на торт/Cake-friendly, являются плюсом.

Что работает:

// Import.php 
public $actsAs = array(
    'Uploader.Attachment' => array(
     'filename' => array(
      // You can use a global constant by itself: 
      'tempDir' => TMP, 
      'uploadDir' => 
      // Using a full string works, too. 
      '/var/www/vhosts/hostname/app/webroot/file/imports', 
      // 
      'finalPath' => '/file/imports/', 
      'nameCallback' => 'nameCallback', 
      'overwrite' => false, 
     ), 
    ), 
); 

То, что я хотел бы работать, но не работает. Вместо конкатенации, я получаю "неожиданный ''" ошибка:

public $actsAs = array(
    'Uploader.Attachment' => array(
     'filename' => array(
      'tempDir' => TMP, 
      // Concatenation of the two results in an "unexpected ." error: 
      // ROOT being '/var/www/vhosts/hostname/' 
      'uploadDir' => ROOT . '/app/webroot/file/imports', 
      // 
      'finalPath' => '/file/imports/', 
      'nameCallback' => 'nameCallback', 
      'overwrite' => false, 
     ), 
    ), 
); 
+0

возможный дубликат [Конкатенация \ _ \ _ DIR \ _ \ _ постоянная с строкой как значением массива, которая является членом класса в PHP] (http://stackoverflow.com/questions/8759905/concatenating-dir-constant-with-a-string-as-an-array-value-which- is-a-class) – ndm

+0

Также http://stackoverflow.com/a/22377621/1392379 – ndm

ответ

0

Вы можете сделать это в конструкторе:

public function __construct($id = false, $table = null, $ds = null) { 
    $this->actAs = array(
    'Uploader.Attachment' => array(
     'filename' => array(
      'tempDir' => TMP, 
      'uploadDir' => ROOT . '/app/webroot/file/imports', 
      'finalPath' => '/file/imports/', 
      'nameCallback' => 'nameCallback', 
      'overwrite' => false, 
     ), 
    ), 
    ); 
    parent::__construct($id, $table, $ds); 
} 
Смежные вопросы