Не Могу Переопределить Cmodel::getattributes()

Собственно как и говорится в названии не могу переопределить CModel::getAttributes() у себя в модели.




Declaration of ContactForm::getAttributes() should be compatible with CModel::getAttributes($names = NULL)






public function getAttributes(array $names=NULL)

    {

        $this->attributesRecursive($this->_config, $output);

        return $output;

    }



Ошибка по стеку идет на стадии инита модели.

Да и вот код модели на gist: gist

То ли это баг, то ли я чтото неправильно сделал. Бьюсь уже очень долго. Помогите пожалуйста.




public function getAttributes(array $names=NULL)



array уберите

Array надо но не там)). Спасибо Артур.

Что то голова сегодня дубовая.

Не подскажете заодно как правильно сделать merge конфиг файлов?)

Делаю


return CMap::mergeArray(require(dirname(__FILE__).'/main.php'), array(.....



Далее переопределяю что мне нужно, но ничего не происходит. Тоесть конфигурации не изменяются.

О, это с удовольствием. Там просто мерж массивов.




//config/local.php

<?php

$parent=require(dirname(__FILE__).'/main.php');

return CMap::mergeArray(

    $parent,

    array(

        'components'=>array(

            'db'=>array(

                'connectionString' => 'mysql:host=localhost;dbname=qwe_main',

                'emulatePrepare' => true,

                'username' => 'root',

                'password' => '',

                'charset' => 'utf8',

                'enableProfiling'=>true,

                'enableParamLogging' => false,

            ),

        ),

        'params'=>array(

            "favicon"=>"favicon-loc.ico",

            "enviroment"=>ENV_LOCAL,

        ),

    )

);

Только в index.php нужно выбирать какой файл подключать. Это можно сделать на основании доменного имени, но при запуске консольных задания, такой автовыбор работать не будет. Поэтому я в прошлом проекте предпочитал читать файлик host.php из каталога выше, чем лежало приложение, а в этом файле определял "имя окружения". Это громоздко, но т.к. активно использовалась консоль, себя оправдывало.

Кстати host.php лежал уровнем выше, что бы он ни коим образом не попадал в систему контроля версий.




//host.php

<? return 'local';






<?php

//index.php

//....

$path=array("../", "../www/", "/var/www/"); //пути в которых может лежать host.php

$fname="host.php";

while (list($key, $val) = @each($path)) {

    if (file_exists($val.$fname)) {$host=include($val.$fname); break; }

}


switch ($host) {

    case ENV_LOCAL: //а эти константы я задал где-то. что бы избежать магических строк

        error_reporting(E_ALL); ini_set("display_errors", 1);

        define('YII_DEBUG', true);

        $config=dirname(__FILE__).'/protected/config/local.php';

        break;

    case ENV_DEV:

        error_reporting(E_ALL); ini_set("display_errors", 1);

        define('YII_DEBUG', true);

        $config=dirname(__FILE__).'/protected/config/dev.php';

        break;

    case ENV_LIVE:

    default: 

        error_reporting(E_ALL ^E_NOTICE); ini_set("display_errors", 1);

        define('YII_DEBUG', false);

        $config=dirname(__FILE__).'/protected/config/live.php';

    break;

}

require_once($yii);

Yii::createWebApplication($config)->run();



Спасибо.

Задавать переменные можно прямо на сервере. Пишем переменные ENV прямо в virtual host апача. Эта часть у меня работает, правда сейчас конфиги лежат отдельно, прямо на субдоменах.




return CMap::mergeArray(require(dirname(__FILE__).'/main.php'), array(

	

	'name' => 'TEST',

	'params' => array(

	'adminEmail' => 'пафвпаф',

	'phoneNumber' => '555-555-555',

	'motto' => 'platform',

	),

));



Вот в таком виде пытаюсь подключить params.php, но ничего не происходит.

Собственно задача - вынести некоторые настройки в веб интерфейс.

Никакая задача не покажется неразрешимой, если разбить её на части. (с)

Если в коде сделаете $t=include(’/config/file.php’); то что будет в $t? Т.е. что именно не мержится?

Судя по коду, все должно работать. Значит проблема где-то в мелочи, запятая не там, или не тот файл используется.

Скорее всего. Ну вообщемто это не первоочередная задача и выходные потерпит. Спасибо за помощь.