Подключение к БД по install.php
Подключение к БД по install.php
Здравствуйте, Друзья! Прошу не судить меня строго за мои может быть не корректные вопросы. Я сегодня первый раз на форуме, меня зовут Ирина. До этого использовала CMS Drupal, но всё же хотелось попытаться изучить framework. Перечитала не мало статей и отзывов, остановила свой выбор на Yii, думаю не зря. Изучаю по видео и текстовым урокам, найденным в инете, немного сложновато по началу, но хочется надеяться, что освою. Длинное у меня вступление получилось, ближе к делу.
Не могу найти нигде информации, о том, как прописать подключение к БД по файлу install.php. Такая функция реализована на сайте http://eximuscommerce.com/, они продают готовый интернет магазин на базе Yii. Вобщем у них уже в архиве предустановленные файлы + файл install.php (демка бесплатная полнофункциональная).
При инсталляции нужно просто в командной строке вписать http://название сайта/install.php, и начинается установка, в БД не нужно прописывать поля.
Не могу найти нигде информации, о том, как прописать подключение к БД по файлу install.php. Такая функция реализована на сайте http://eximuscommerce.com/, они продают готовый интернет магазин на базе Yii. Вобщем у них уже в архиве предустановленные файлы + файл install.php (демка бесплатная полнофункциональная).
При инсталляции нужно просто в командной строке вписать http://название сайта/install.php, и начинается установка, в БД не нужно прописывать поля.
- Вложения
-
- 2.jpg (39.06 КБ) 4650 просмотров
-
- 1.jpg (48.35 КБ) 4650 просмотров
Re: Подключение к БД по install.php
Привет, Ирина!
Посмотрите, что внутри этого install.php.
Настройки подключения к СУБД в Yii задаются либо через файл конфигурации приложения (protected/config/main.php), пример:
в этом случае создается компонент приложения, который позволяет взаимодействовать с базой данных и доступ к этому компоненту в коде приложения можно получить так: Yii::app()->db.
Либо можно создать "на лету" подключение к БД, для этого нужно создать экземпляр класса CDbConnection, в конструктор передать dsn, имя пользователя БД, пароль пользователя.
Посмотрите, что внутри этого install.php.
Настройки подключения к СУБД в Yii задаются либо через файл конфигурации приложения (protected/config/main.php), пример:
Код: Выделить всё
return array(
'components' => array(
'db' => array(
'connectionString' => 'mysql:host=localhost;dbname=test',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'tablePrefix' => '',
'schemaCachingDuration' => 3600,
),
Либо можно создать "на лету" подключение к БД, для этого нужно создать экземпляр класса CDbConnection, в конструктор передать dsn, имя пользователя БД, пароль пользователя.
Re: Подключение к БД по install.php
Здравствуйте, iAchilles! Спасибо за ответ!
В db (main.php) у них прописано так:
Затем, после того, как заполняются поля для регистрации в БД и заканчивается вся регистрация в db меняется на:
Файл install.php
Полный файл main.php до инсталяции:
Еще мне не понятно с модулями в файле main.php так:
На самом деле в папке modules так:
В db (main.php) у них прописано так:
Код: Выделить всё
'db'=>array(
'connectionString' => 'mysql:host=127.0.0.1;dbname=',
'username'=>'',
'password'=>'',
'enableProfiling' => YII_DEBUG, // Disable in production
'enableParamLogging' => YII_DEBUG, // Disable in production
'emulatePrepare' => true,
'schemaCachingDuration' => YII_DEBUG ? 0 : 3600,
'charset' => 'utf8',
Код: Выделить всё
'db'=>array(
'connectionString'=>'mysql:host=localhost;dbname=exim',
'username'=>'Имя пользователя указанное при регистрации',
'password'=>'Пароль указанный при регистрации',
'enableProfiling' => YII_DEBUG, // Disable in production
'enableParamLogging' => YII_DEBUG, // Disable in production
'emulatePrepare' => true,
'schemaCachingDuration' => YII_DEBUG ? 0 : 3600,
'charset' => 'utf8',
Код: Выделить всё
<?php
$config=array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'protected',
'sourceLanguage'=>'ru',
'modules'=>array(
'install',
),
'import'=>array(
'application.models.*',
'application.components.*',
),
'components'=>array(
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>true,
'rules'=>array(
'/'=>'install/default',
)),
'cache'=>array(
'class'=>'CDummyCache',
),
'languageManager'=>array(
'class'=>'SLanguageManager'
),
),
'params'=>array(),
);
error_reporting(0);
define('VERSION', '1.5');
// change the following paths if necessary
$yii=dirname(__FILE__).'/framework/yii.php';
//defined('YII_DEBUG') or define('YII_DEBUG', true);
//defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);
require_once $yii;
Yii::createWebApplication($config)->run();
Код: Выделить всё
<?php
// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder')
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'language'=>'ru',
//'sourceLanguage'=>'ru',
// pre-loading components
'preload'=>array('log'),
// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
'application.components.payment.*',
'application.components.validators.*',
'application.modules.core.models.*',
'application.modules.users.models.User',
// Rights module
'application.modules.rights.*',
'application.modules.rights.components.*',
),
'modules'=>array(
'action_logger',
'admin'=>array(),
'rights'=>array(
'layout'=>'application.modules.admin.views.layouts.main',
'cssFile'=>false,
'debug'=>YII_DEBUG,
),
'core',
),
// application components
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
'class'=>'BaseUser',
'loginUrl'=>'/users/login'
),
'urlManager'=>array(
'urlFormat'=>'path',
'class'=>'SUrlManager',
'showScriptName'=>false,
'useStrictParsing'=>true,
'rules'=>array(
'/'=>'store/index/index',
'admin/auth'=>'admin/auth',
'admin/auth/logout'=>'admin/auth/logout',
'admin/<module:\w+>'=>'<module>/admin/default',
'admin/<module:\w+>/<controller:\w+>'=>'<module>/admin/<controller>',
'admin/<module:\w+>/<controller:\w+>/<action:\w+>'=>'<module>/admin/<controller>/<action>',
'admin/<module:\w+>/<controller:\w+>/<action:\w+>/*'=>'<module>/admin/<controller>/<action>',
'filemanager/connector' => 'admin/fileManager/index',
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'admin'=>'admin/default/index',
'rights'=>'rights/assignment/view',
'rights/<controller:\w+>/<id:\d+>'=>'rights/<controller>/view',
'rights/<controller:\w+>/<action:\w+>/<id:\d+>'=>'rights/<controller>/<action>',
'rights/<controller:\w+>/<action:\w+>'=>'rights/<controller>/<action>',
'gii'=>'gii',
'gii/<controller:\w+>'=>'gii/<controller>',
'gii/<controller:\w+>/<action:\w+>'=>'gii/<controller>/<action>',
),
),
'db'=>array(
'connectionString' => 'mysql:host=127.0.0.1;dbname=',
'username'=>'',
'password'=>'',
'enableProfiling' => YII_DEBUG, // Disable in production
'enableParamLogging' => YII_DEBUG, // Disable in production
'emulatePrepare' => true,
'schemaCachingDuration' => YII_DEBUG ? 0 : 3600,
'charset' => 'utf8',
),
'request'=>array(
'class'=>'SHttpRequest',
'enableCsrfValidation'=>true,
'enableCookieValidation'=>true,
'noCsrfValidationRoutes'=>array(
'/processPayment',
'/accounting1c/default/',
'/filemanager/connector',
)
),
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'site/error',
),
'authManager'=>array(
'class'=>'RDbAuthManager',
'connectionID'=>'db',
),
'cache'=>array(
'class'=>'CFileCache',
),
'languageManager'=>array(
'class'=>'SLanguageManager'
),
'fixture'=>array(
'class'=>'system.test.CDbFixtureManager',
),
'cart'=>array(
'class'=>'ext.cart.SCart',
),
'currency'=>array(
'class'=>'store.components.SCurrencyManager'
),
'mail'=>array(
'class'=>'ext.mailer.EMailer',
'CharSet'=>'UTF-8',
),
'settings'=>array(
'class'=>'application.components.SSystemSettings'
),
'log'=>YII_DEBUG===true ? require('logging.php') : null,
),
// application-level parameters that can be accessed
// using Yii::app()->params['paramName']
'params'=>array(
// this is used in contact page
'adminEmail'=>'[email protected]',
'adminPageSize'=>30,
),
);
Код: Выделить всё
'modules'=>array(
'action_logger',
'admin'=>array(),
'rights'=>array(
'layout'=>'application.modules.admin.views.layouts.main',
'cssFile'=>false,
'debug'=>YII_DEBUG,
),
'core',
),
- Вложения
-
- modules.jpg (25.27 КБ) 4628 просмотров
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: Подключение к БД по install.php
Стартовый пост чертовски напоминает рекламу eximuscommerce
Luchanka, ты же в последнем комментарии сама привела пример конфига для подключения к БД)
А по поводу модулей - в папке modules лежат модули проекта. Они к проекту не подключены, если просто там лежат. Подключаются к проекту они как раз в main.php
Luchanka, ты же в последнем комментарии сама привела пример конфига для подключения к БД)
А по поводу модулей - в папке modules лежат модули проекта. Они к проекту не подключены, если просто там лежат. Подключаются к проекту они как раз в main.php
Re: Подключение к БД по install.php
Я ни в коем разе не рекламирую eximuscommerce, я просто привела один из примеров функционала, который мне нужен.
Re: Подключение к БД по install.php
Ребята, так ни у кого и нет рекомендаций к моей проблеме?
- Beaten_Sect0r
- Сообщения: 234
- Зарегистрирован: 2011.06.15, 14:58
- Откуда: Ярославль
- Контактная информация:
Re: Подключение к БД по install.php
даже не понял в чем вопрос.Luchanka писал(а):Ребята, так ни у кого и нет рекомендаций к моей проблеме?
указывайте при инсталяции ваши данные к базе данных.
_https://coru.ws
Re: Подключение к БД по install.php
Дак вопрос в том и состоит. Как прописать инсталляцию к БД.
- Beaten_Sect0r
- Сообщения: 234
- Зарегистрирован: 2011.06.15, 14:58
- Откуда: Ярославль
- Контактная информация:
Re: Подключение к БД по install.php
На локалхосте
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: Подключение к БД по install.php
У вас вопрос по конкретно установке eximuscommerce.com или в принципе вы не знаете, как подключение к БД задавать?
Re: Подключение к БД по install.php
eximuscommerce.com я привела в качестве примера по формированию полей БД. У меня нет вопросов по eximuscommerce.com.Neuromance писал(а):У вас вопрос по конкретно установке eximuscommerce.com или в принципе вы не знаете, как подключение к БД задавать?
Вопрос в другом.
В
Код: Выделить всё
'db'=>array(
- Вложения
-
- Поля для подключения к БД
- 3.jpg (62.51 КБ) 4537 просмотров
- Neuromance
- Сообщения: 716
- Зарегистрирован: 2011.09.06, 13:04
Re: Подключение к БД по install.php
Перечитал еще раз тему. Теперь понял, что требуется
Очень похоже на то, что ExCommerce парсят файл и подменяют его данные теми, которые пришли из формы.
Очень похоже на то, что ExCommerce парсят файл и подменяют его данные теми, которые пришли из формы.
Re: Подключение к БД по install.php
Вы собираетесь проектировать CMS? Если нет, то первоначальную настройку базы, добавление таблиц, заполнение начальными данными, в Yii удобно выполнять с помощью миграций.Luchanka писал(а):Но я не могу понять как сделать, чтобы при первом открытии были поля для подключения к базе данных, типа как в обычной CMS (ложим в корневую папку сайта, затем вводим URL и первым делом появляются поля для соединения с базой данных).
Если нужна именно эта форма, то делайте следующее:
1. Модель формы (CFormModel) для ввода значений, которые необходимы для создания CDbConnection.
2. В /protected/config/main.php по умолчанию не указывайте настроек для компонента приложения, позволяющего работать с СУБД ("db").
3. В контроллере проверяйте is_null(Yii::app()->getComponent('db')) - значит БД не настроена, рендерьте вью с формой.
4. После получения значений из формы сделайте, что-то вроде этого (не забудьте про правила валидации для полей модели!):
файл вашего контроллера, action для работы с настройкой БД.
Код: Выделить всё
...
if (!is_null(Yii::app()->getComponent('db'))
{
//База настроена, редирект или вью, который нужен в случае, если настройка бд уже произведена.
}
$formModel = new YourFormModel();
$formModelName = get_class($formModel);
$request = Yii::app()->request;
if (is_null($request->getParam($formModelName)))
{
//Рендерим представление с формой. $this->render();
Yii::app()->end();
}
//Данные получены
$formModel->attributes = $request->getParam($formModel);
if ($formModel->validate())
{
$dbArray = array('components' => array('db' => array(
'connectionString' => 'mysql:host=' . $formModel->host . ';dbname=' . $formModel->dbName,
'username' => $formModel->username,
'password' => $formModel->password)));
$config = require(Yii::getPathOfAlias('application.config') . '/main.php');
$newConfig = CMap::mergeArray($config, $dbArray);
//Сохраняете в файл.
file_put_contents(Yii::getPathOfAlias('application.config') . '/main.php', '<?php return ' . var_export($newConfig, true) . ';');
}
Re: Подключение к БД по install.php
Спасибо Вам за ответ! Пока не совсем понятно... Да, я хочу создать небольшую CMS, чтобы у меня была готовая основная заготовка.iAchilles писал(а):Вы собираетесь проектировать CMS? Если нет, то первоначальную настройку базы, добавление таблиц, заполнение начальными данными, в Yii удобно выполнять с помощью миграций.Luchanka писал(а):Но я не могу понять как сделать, чтобы при первом открытии были поля для подключения к базе данных, типа как в обычной CMS (ложим в корневую папку сайта, затем вводим URL и первым делом появляются поля для соединения с базой данных).
Если нужна именно эта форма, то делайте следующее:
1. Модель формы (CFormModel) для ввода значений, которые необходимы для создания CDbConnection.
2. В /protected/config/main.php по умолчанию не указывайте настроек для компонента приложения, позволяющего работать с СУБД ("db").
3. В контроллере проверяйте is_null(Yii::app()->getComponent('db')) - значит БД не настроена, рендерьте вью с формой.
4. После получения значений из формы сделайте, что-то вроде этого (не забудьте про правила валидации для полей модели!):
файл вашего контроллера, action для работы с настройкой БД.Код: Выделить всё
... if (!is_null(Yii::app()->getComponent('db')) { //База настроена, редирект или вью, который нужен в случае, если настройка бд уже произведена. } $formModel = new YourFormModel(); $formModelName = get_class($formModel); $request = Yii::app()->request; if (is_null($request->getParam($formModelName))) { //Рендерим представление с формой. $this->render(); Yii::app()->end(); } //Данные получены $formModel->attributes = $request->getParam($formModel); if ($formModel->validate()) { $dbArray = array('components' => array('db' => array( 'connectionString' => 'mysql:host=' . $formModel->host . ';dbname=' . $formModel->dbName, 'username' => $formModel->username, 'password' => $formModel->password))); $config = require(Yii::getPathOfAlias('application.config') . '/main.php'); $newConfig = CMap::mergeArray($config, $dbArray); //Сохраняете в файл. file_put_contents(Yii::getPathOfAlias('application.config') . '/main.php', '<?php return ' . var_export($newConfig, true) . ';'); }