конфигурация базы данных codeigniter программно формирует пользовательский ввод - PullRequest
0 голосов
/ 25 августа 2011

Кто-нибудь может мне помочь?

Как программно настроить параметры базы данных CI?Я видел это с другими системами, такими как OSCommerce, Joomla, Wordpress и т. Д.

Пользователь должен отправить форму с информацией базы данных.

Ответы [ 4 ]

2 голосов
/ 07 октября 2012

Я нашел два решения для этого, хотя одно я еще не проверял.

Существует множество проектов, основанных на платформе Codeigniter, которые имеют своего рода установщик.Как писал «Repox», вы можете найти это в MojoMotor, есть класс расширения core / Config.php, который выполняет эту конкретную задачу, также есть в Expression Engine.К сожалению, они находятся под коммерческой лицензией и не могут быть использованы.

Одно бесплатное приложение, использующее такое решение, - Ionize CMS.

Взгляните на этот класс: https://github.com/ionize/ionize/blob/master/install/class/Config.php

Второе - в искре, называемой "файлы".,Вы можете найти его здесь: http://getsparks.org/packages/files/versions/HEAD/show

Очевидным ограничением является то, что он переписывает файл конфигурации.

На это указывало несколько раз даже в "codeigniter github issue 1058" (google thatдля ссылки) но, к сожалению, разработчики решили закрыть его.

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

1 голос
/ 25 августа 2011

Поскольку нет автоматического установщика CI , как для Joomla, Wordpress и т. Д., Это невозможно.Итак, если вам нужна такая возможность, вам придется создать такой установщик самостоятельно.Если вы это сделаете, не забудьте поделиться этим с сообществом.

0 голосов
/ 26 августа 2011

Такой подход должен быть в порядке.Все, что вам нужно сделать, это избегать автозагрузки библиотеки БД в файле autoload.php, так как в противном случае она будет выдавать ошибку каждый раз, когда вы пытаетесь загрузить страницу.

$autoload['libraries'] = array(<strike>'database',</strike> 'form_validation', 'cart','session');

После этого вы можете иметь MY_Controller, который имеет:

function __construct()
{
    $this->load->database();
}

Затем вы можете расширить это на все контроллеры, которым требуется доступ к БД, убедившись, что исключаете тот, с которого запускается установка.

0 голосов
/ 25 августа 2011

На самом деле это довольно сложный процесс.

MojoMotor , основанный на CI, имеет установочный скрипт, который добавляет дополнения к application/config/database.php, что означает, что это не невозможно.

Лицензионное соглашение для MM запрещает мне публиковать фактический скрипт установки, но вы должны иметь возможность создавать что-то, что работает.

В противном случае представьте что-то вроде этого:

    // Data from user input
    $db_config['hostname'] = $this->input->post('db_host');
    $db_config['username'] = $this->input->post('db_user');
    $db_config['password'] = $this->input->post('db_password');
    $db_config['database'] = $this->input->post('db_name');
    $db_config['dbdriver'] = $this->db_driver;
    $db_config['dbprefix'] = $this->db_prefix;
    $db_config['pconnect'] = ($this->input->post('pconnect')) ? TRUE : FALSE;

    $this->CI =& get_instance();
    $this->CI->load->helper('file');

    $prototype = array(
                        'hostname'  => 'localhost',
                        'username'  => '',
                        'password'  => '',
                        'database'  => '',
                        'dbdriver'  => 'mysql',
                        'dbprefix'  => 'mojo_',
                        'pconnect'  => TRUE,
                        'db_debug'  => FALSE,
                        'cache_on'  => FALSE,
                        'cachedir'  => '',
                        'char_set'  => 'utf8',
                        'dbcollat'  => 'utf8_general_ci'
                    );

    // Now we read the file data as a string
    $config_file = read_file(APPPATH.'config/database'.EXT);

    // Dollar signs seem to create a problem with our preg_replace
    // so we'll temporarily swap them out
    $config_file = str_replace('$', '@s@', $config_file);

    // Cycle through the newconfig array and swap out the data
    if (count($dbconfig) > 0)
    {
        foreach ($dbconfig as $key => $val)
        {
            if ($val === 'y')
            {
                $val = TRUE;
            }
            elseif ($val == 'n')
            {
                $val = FALSE;
            }

            if (is_bool($val))
            {
                $val = ($val == TRUE) ? 'TRUE' : 'FALSE';
            }
            else
            {
                $val = '\''.$val.'\'';
            }

            $val .= ';';

            // Update the value
            $config_file = preg_replace("#(\@s\@db\[(['\"])".$active_group."\\2\]\[(['\"])".$key."\\3\]\s*=\s*).*?;#", "\\1$val", $config_file);
        }
    }

    // Put the dollar signs back
    $config_file = str_replace('@s@', '$', $config_file);

    // Just to make sure we don't have any unwanted whitespace
    $config_file = trim($config_file);

    // Write the file
    $fp = fopen($this->database_path, FOPEN_WRITE_CREATE_DESTRUCTIVE);

    flock($fp, LOCK_EX);
    fwrite($fp, $config_file, strlen($config_file));
    flock($fp, LOCK_UN);
    fclose($fp);

Я не проверял это, но я пытаюсь реализовать что-то похожее на один из моих собственных проектов.

Надеюсь, это может немного приблизить вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...