Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Сохранение данных в файл конфигурации
http://forum.kohanaframework.su/viewtopic.php?f=38&t=405
Страница 2 из 3

Автор:  AmberLEX [ 03 июл 2013, 01:50 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

Вот короткое решение для записи в конфиг:
Код:
<?php defined('SYSPATH') or die('No direct script access.');
/**
 * Class Config_Group
 */
class Config_Group extends Kohana_Config_Group
{
    /**
     * Write to config file
     */
    public function save()
    {
        if ($files = Kohana::find_file('config', $this->_group_name))
        {
            $contents = Kohana::FILE_SECURITY . "\n\nreturn " . var_export($this->getArrayCopy(), true) . ';';

            file_put_contents(array_pop($files), $contents);
        }
    }
}
 

Автор:  WinterSilence [ 03 июл 2013, 08:15 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

AmberLEX> PHP_EOL используйте, array_pop($files) не для всех случаев подходит - этого я не учел

Автор:  AmberLEX [ 03 июл 2013, 10:22 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

Забываю я про PHP_EOL)
array_pop я проверял, прописывал в application/config и в 2-х модулях такой же config с таким же именем, но наверное не так подробно, для каких случаев не подходит?
Я кстати, к нему так и пришел, когда смотрел зачем нужен $filename = $files[count($files)-1];

вот 3 файла в application/config
app.php
app0.php
app1.php

их же забросил в
modules/auth/config
modules/databse/config
system/config

В контроллере
Код:
$this->_settings  = Kohana::$config->load('app');
$this->_settings0 = Kohana::$config->load('app0');
$this->_settings1 = Kohana::$config->load('app1');

$this->_settings0['sitename'] = 'xxx';
$this->_settings0->save();
 

Вот что выдает save()
Код:
$files = Kohana::find_file('config', $this->_group_name)
print_r($files);
print_r(array_pop($files));

Array
(
    [0] => /home/http/kohana330/system/config/app0.php
    
[1] => /home/http/kohana330/modules/database/config/app0.php
    
[2] => /home/http/kohana330/modules/auth/config/app0.php
    
[3] => /home/http/www/mysite/application/config/app0.php
)

/
home/http/www/mysite/application/config/app0.php

Автор:  WinterSilence [ 03 июл 2013, 11:08 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

AmberLEX> массив возвращается только когда найдено несколько файлов, если он один возвращает соответственно строку

Автор:  AmberLEX [ 03 июл 2013, 11:14 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

Если найден один файл возвращается массив из одного элемента, array_pop работает

Автор:  WinterSilence [ 03 июл 2013, 11:18 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

AmberLEX> ты код посмотри лучше, там у метода доп. условие имеется
public static function find_file($dir, $file, $ext = NULL, $array = FALSE)
boolean $array = bool FALSE - Return an array of files?
Return Values
array - A list of files when $array is TRUE
string - Single file path


http://kohanaframework.org/3.3/guide-ap ... #find_file

Автор:  AmberLEX [ 03 июл 2013, 11:24 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

if ($array OR $dir === 'config' OR $dir === 'i18n' OR $dir === 'messages')
{...}
else
{ // тут строка }
Так вроде бы речь идет о записи в конфиг а не в любой файл

Автор:  AmberLEX [ 03 июл 2013, 11:28 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

В методе save() четкий вызов метода с нужными параметрами для записи в конфиг
Kohana::find_file('config', $this->_group_name)
О какой строке идет речь?

Автор:  WinterSilence [ 03 июл 2013, 11:31 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

AmberLEX> точно, в случае с конфигами ты прав, я просто не только для конфигов использую подобный код

Автор:  AmberLEX [ 03 июл 2013, 12:10 ]
Заголовок сообщения:  Re: Сохранение данных в файл конфигурации

После часа поиска несуществующего бага вариант для записи в конфиг. Ура! :)
Код:
/**
 * Write to config file
 */
public function save()
{
    if ($files = Kohana::find_file('config', $this->_group_name))
    {
        $contents = Kohana::FILE_SECURITY.PHP_EOL.'return '.var_export($this->getArrayCopy(), true).';';

        file_put_contents(array_pop($files), $contents);
    }
}
 

Страница 2 из 3 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/