Zend_Config
Zend_Config là 1 lớp trong ZF được thiết kế để truy cập,sử dụng,chỉnh sửa cấu hình của ứng dụng.
ta tạo ra ConfigController để test thử cách dùng Zend_Config
class ConfigController extends Zend_Controller_Action{
public function init(){
$this->_helper->viewRenderer->setNoRender();
$this->_helper->layout->disableLayout();
}
}
vì chỉ để test nên ta tạo ra hàm init(hàm này chạy đầu tiên khi controller được gọi)
$this->_helper->viewRenderer->setNoRender():ko dùng view
this->_helper->layout->disableLayout(): ko load layout vào ứng dụng
1)Sử dụng Zend_Config
public function indexAction(){
$configArray = array(
'webhost' => 'www.example.com',
'database' => array(
'adapter' => 'pdo_mysql',
'params' => array(
'host' => 'db.example.com',
'username' => 'dbuser',
'password' => 'secret',
'dbname' => 'mydatabase'
)
)
);
$config = new Zend_Config($configArray);
echo '<br>'.$config->webhost;//output:'www.example.com
echo'<br>'. $config->database->adapter;//output:pdo_mysql
}
ban đầu ta tạo ra mảng $configArray lưu trữ thông tin cấu hình ứng dụng ,sau đó khởi tạo đối tượng $config với tham số truyền vào hàm __construct của Zend_Config là mảng $configArray.Ta thử in ra các thông tin đã truyền vào như webhost,adapter
ta cũng có thể truyền thông tin kết nối database trên vào Zend_DB
$db = Zend_Db::factory($config->database);
Nhưng khi bạn thử sửa 1 thông số nào đó,chẳg hạn
$config->webhost = 'www.zendvn.com';
sẽ có lỗi được thông báo bởi vì mặc định thì Zend_Config ko cho ta sửa các thông số được truyền vào.Để làm điều này ta truyền vào tham số thứ 2 cho hàm __contruct của Zend_Config,sửa lại đọan mã trên 1 chút như sau
$config = new Zend_Config($configArray,true);
Vậy là ta đã thực hiện xong việcn truyền thông tin cấu hình vào Zend_Config.Vậy khi muốn đọc thông tin cấu hình có sẵn trong các tập tin ini hay xml trong thư mục cấu hình của ứng dụng thì làm thế nào?
Tôi có tập tin cấu hình ứng dụng application.ini trong thư mục configs
[production] phpSettings.display_status_errors = 0 phpSettings.display_errors = 0 phpSettings.default_charset = "UTF-8" phpSettings.date.timezone = "Asia/Ho_Chi_Minh" //đường dẫn đến tập tion Boostrap bootstrap.path = APPLICATION_PATH "/Bootstrap.php" //tên tập tin Bootstrap bootstrap.class = "Bootstrap" autoloaderNamespaces[] = "Zendvn_" //thu muc chua cac controller resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.layout.layout = "index" resources.db.adapter = "PDO_MYSQL" resources.db.params.host = "localhost" resources.db.params.username = "root" resources.db.params.password ="" resources.db.params.dbname = "zftutorial" [developer : production] phpSettings.display_status_errors = 1 phpSettings.display_errors = 1 phpSettings.default_charset = "UTF-8" phpSettings.date.timezone = "Asia/Ho_Chi_Minh" resources.db.adapter = "PDO_MYSQL" resources.db.params.host = "localhost" resources.db.params.username = "root" resources.db.params.password ="" resources.db.params.dbname = "zftutorial1234"
tạo ra action mới để test vấn đề này
public function iniAction(){
$filename= CONFIG_PATH.'/application.ini';
$section = 'production';
$options = array('allowModifications'=>true,'nestSeparator'=>'.');
$config = new Zend_Config_Ini($filename,$section,$options);
$config->resources->db->params->dbname = 'test';
echo '<pre>';
print_r($config->resources->db->toArray());
echo '</pre>';
}
để đọc tập tin cấu hình có sẵn ta dùng lớp Zend_Config_Ini($filename,$section,$options);
$filename: đường dẫn tuyệt đối đến tập tin cấu hình(ở đây là application.ini)
$section:phân đọan muốn sử dụng(ở đây tôi dùng phân đọan production)
$options:mảng tham số
Hẳng số CONFIG_PATH đã được tôi định nghĩa trong tập tin index.php chạy đầu tiên của ứng dụng
define('CONFIG_PATH', realpath(APPLICATION_PATH . '/configs'));
ta thử in ra mảng chứa thông tin cấu hình kết nối CSDL
echo '<pre>';
print_r($config->resources->db->toArray());
echo '</pre>';
tương tự như trên nếu bạn muốn chỉnh sửa thông tin trong file cấu hình đã truyền vào Zend_Config_Ini bạn phải truyền cho hàm __contruct của nó thêm mảng tham số $options
$options = array('allowModifications'=>true,'nestSeparator'=>'.');
allowModifications:cho phép chỉnh sửa
nestSeparator:mặc định là dấu chấm'.' ,chẳng hạn trong file application.ini của tôi
phpSettings.display_status_errors = 1
ở đây dấu chấm để ngăn cách giữa phpSettings và display_status_errors,nếu trong file cấu hình bạn thích viết là
phpSettings:display_status_errors = 1
thì phải khai báo nestSeparator là dấu hai chấm(:)
Tôi đã đọc tập tin cấu hình ini,vậy nếu 1 số host ko hỗ trợ hàm để phân tích tập tin này thì sao?Thông thường ZF cho phép ta cấu hình ứng dụng bằng cả tập tin .xml
tạo ra action mới để test vấn đề này
public function xmlAction(){
$xml = CONFIG_PATH.'/config.xml';
$section = 'production';
$options = true;
$config = new Zend_Config_Xml($xml,$section,$options);
echo $config->database->params->host;
$config->database->params->dbname = 'testtest';
echo '<br>'.$config->database->params->dbname;
echo '<pre>';
print_r($config->toArray());
echo '</pre>';
}
và tập tin cấu hình config.xml của tôi như sau
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<production>
<webhost>www.example.com</webhost>
<database>
<adapter>pdo_mysql</adapter>
<params>
<host>db.example.com</host>
<username>dbuser</username>
<password>secret</password>
<dbname>dbname</dbname>
</params>
</database>
</production>
<staging extends="production">
<database>
<params>
<host>dev.example.com</host>
<username>devuser</username>
<password>devsecret</password>
</params>
</database>
</staging>
</configdata>
Tương tự như cách độc tập tin.ini
$xml: đường dẫn tuyệt đối đến tập tin cấu hình(ở đây là config.xml)
$section:phân đọan muốn sử dụng(ở đây tôi dùng phân đọan production)
$options:mảng tham số cho phép chỉnh sửa(mặc định là false)
Tiếp theo tôi hướng dẫn cách tạo 1 tập tin config cho ứng dụng hoặc ghi đè các thông tin cấu hình trong tập tin config
tạo ra writeXmlAction để test vấn đề này
public function writeXmlAction(){
$config = new Zend_Config(array(), true);
$config->production = array();
$config->staging = array();
$config->setExtend('staging', 'production');
$config->production->db = array();
$config->production->db->hostname = 'localhost';
$config->production->db->username = 'production';
$config->staging->db = array();
$config->staging->db->username = 'staging';
// Write the config file in one of the following ways:
// a)
$filename = CONFIG_PATH.'/writeXml.xml';
$writer = new Zend_Config_Writer_Xml(array('config' => $config,
'filename' => $filename));
$writer->write();
$writer = new Zend_Config_Writer_Xml();
$filename = $filename = CONFIG_PATH.'/writeXml2.xml';
$writer->setConfig($config)
->setFilename($filename)
->write();
$filename = CONFIG_PATH.'/writeXml3.xml';
$writer = new Zend_Config_Writer_Xml();
$writer->write($filename, $config);
}
Ban đầu tôi tạo ra 1 đối tượng $config rỗng sau đó thiết lập các thuộc tính cho nó hoặc đơn giản hơn ta có thể tạo ra đối tượng này bằng cách truyền mảng $configArray vào hàm __contruct của Zend_Config như các ví dụ trước
$configArray = array(
'webhost' => 'www.example.com',
'database' => array(
'adapter' => 'pdo_mysql',
'params' => array(
'host' => 'db.example.com',
'username' => 'dbuser',
'password' => 'secret',
'dbname' => 'mydatabase'
)
)
);
$config = new Zend_Config($configArray);
Muốn ghi lại thông tin cấu hình ta cần cung cấp hai tham số
$filename:đường dẫn truyệt đối đến tập tin config bạn muốn tạo ra
$config: đối tượng Zend_config
ở ví dụ trên tôi đã tạo ra 3 tập tin cấu hình mới là writeXml.xml,writeXml2.xml và writeXml3.xml
Chỉnh sửa
tạo ra modifyFileAction
public function modifyFileAction(){
$xml= CONFIG_PATH . '/writeXml2.xml';
$section = null;
$options=array('skipExtends' => true,
'allowModifications' => true);
$config = new Zend_Config_Xml($xml,$section,$options);
echo '<pre>';
print_r($config->toArray());
echo '</pre>';
$config->production->db->hostname = 'foobar';
$writer = new Zend_Config_Writer_Xml(array('config' => $config,
'filename' => $xml));
$writer->write();
}
$xml: đường dẫn tuyệt đối đến tập tin xml muốn chỉnh sửa
$section:phân đọan muốn sử dụng
skipExtends:bỏ qua phần mở rộng.Giả sử bạn có phân đọan staging extend từ phân đọan production,khi thay đổi hostname chẳng hạn $config->production->db->hostname = 'foobar'; nếu bạn để true thì các phân đọan extend từ phân đọan của production sẽ ko chịu sự ảnh hưởng này nhưng nếu bạn để false thì tất cả các phân đọan extend từ production sẽ tự động thiết lập lại hostname
allowModifications:cho phép chỉnh sửa
Lưu ý:muốn chỉnh sửa tập tin xml thì dùng Zend_Config_Writer_Xml còn ini thì dùng Zend_Config_Writer_Ini
ZF còn cho phép ta cấu hình bằng json và YAML .Vấn đề này sẽ đề cập sau,nó cũng tương tự như cách cấu hình ini và xml
- 1.cám ơn thầy nhiều.
- 2.Hướng dẫn rất chất lượng. Đã hướng dẫn ít ra phải như thế này dân mù tịt như em mới rõ ngọn rõ...
- 3.Tiếng Anh thì >>thông cãm
- 4.fafa
- 5.Mình đã fix được rồi. Thanks bạn nhiều lắm !
- 6.Dịch vụ quá nguy hiểm... Giờ mới biết Vinaphone có cái dịch vụ "Giết người" này. Nếu biết từ trước...
- 7.cung hay day nhi...
- 8.NGƯỜI TA ĐÃ TỰ BIẾT DỊP TẾT LÀ HAY NGHẼN MẠNG VẬY NHÀ MẠNG LÀM NHƯ THẾ NÀY LÀ CƯỚP KHUYẾN MẠI CỦA...
- 9.Nhóm cuối cùng có lẽ là đáng ngạc nhiên, hoặc có lẽ hoàn toàn rõ ràng - đó là chính phủ. Một câu hỏi...
- 10.Nhóm cuối cùng có lẽ là đáng ngạc nhiên, hoặc có lẽ hoàn toàn rõ ràng - đó là chính phủ. Một câu hỏi...
- 1.Cài đặt và cấu hình ứng dụng Zend Framework (video...
- 2.Lập trình hướng đối tượng trong PHP (video...
- 3.Lập trình hướng đối tượng trong PHP 5 ( PHP OOP )
- 4.Zend Auth với ví dụ login - logout
- 5.Tài liệu Zend Framework
- 6.Hàm xử lý ngày tháng (Date and Time php function)
- 7.Webserver - Hướng dẫn cài đặt và sử dụng Xampp
- 8.Zend_Db - Những phương thức cơ bản
- 9.Các kiểu lập trình trong PHP (Phần 1)
- 10. Zend_Framework & JQuery ajax phân trang
- xin code bat dong san bang php zend framework
- Help help help
- hướng dẫn tối ưu url bằng file htaccess
- mã hóa khó hiểu
- Tuyển 05 Lập Trình Viên PHP
- confix phpmailer host linux
- Học.Viên.Mới.Xin.Giúp.Đỡ!!!!
- Cho mình về validate số điện thoại
- Hướng dẫn sử dụng lệnh YUM trong Linux
- Bị loop khi dùng session





bởi thanhlong1705
Ngày 07/12/2011 vào lúc 08:41:43