本文概述
有很多方法可以使用symfony命令。你可以做的一件有用的事情是使与项目数据库相关的任务自动化, 甚至创建助手方法以在开发模式下清除表等。如果你使用的是Symfony 1.4, 我们将向你快速说明如何在Symfony的”任务”或”控制台”命令中轻松访问数据库。
检索数据库连接
如你所知, 你可以在./proyect/config/databases.yml文件中定义多个数据库连接。在此文件中, 你可以通过以下方式定义连接:
# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/07-Databases
all:
doctrine:
class: sfDoctrineDatabase
param:
dsn: mysql:host=localhost;dbname=my_database
username: root
password: password
如你所见, 在此示例中, 我们使用给定的配置创建了一个名为doctrine的简单连接。因此, 在我们的代码中检索连接, 我们将使用命名的学说连接。但是, 你感兴趣的是一个非常简单的帮助程序方法, 可以将其添加到”任务类”以检索默认连接:
<?php
/**
* This method creates a connection to the default database of your application with Doctrine.
*
* @return type
*/
private function getDefaultDatabaseConnection()
{
$databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration($application = "frontend", $env = "prod", $debug = true));
// Get some connection stablished on the databases.yml file
$databaseConnection = "doctrine";
$databaseManager->getDatabase($databaseConnection)->getConnection();
return Doctrine_Manager::getInstance()->getCurrentConnection();
}
getDefaultDatabaseConnection会在你的database.yml文件中返回定义的学说连接, 但是你可以更改其他名称。
任务示例
以下测试任务显示了由以下类定义的php symfony test-command:demo执行的基本示例, 你将可以在execute函数中使用数据库连接:
<?php
// ./proyect/lib/task/TestCommandTask.class.php
/**
* Example of Symfony 1.4 to get access to the database within a console command (task).
*
* @author Carlos Delgado <dev@ourcodeworld.com>
*/
class TestCommandTask extends sfBaseTask {
public function configure()
{
$this->namespace = 'test-command';
$this->name = 'demo';
$this->briefDescription = 'This command does something';
$this->detailedDescription = <<<EOF
Description of this command.
EOF;
}
/**
* This method creates a connection to the default database of your application with Doctrine.
*
* @return type
*/
private function getDefaultDatabaseConnection()
{
$databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration($application = "frontend", $env = "prod", $debug = true));
// Get some connection defined on the databases.yml file
$databaseConnection = "doctrine";
$databaseManager->getDatabase($databaseConnection)->getConnection();
return Doctrine_Manager::getInstance()->getCurrentConnection();
}
/**
* Action of the command.
*
* @param type $arguments
* @param type $options
*/
public function execute($arguments = array(), $options = array()) {
// Request access to database
$conn = $this->getDefaultDatabaseConnection();
// Now here you are able to execute queries in the way you want, or access tables with Doctrine e.g
// $item = Doctrine_Core::getTable('items')->find(1);
// $conn->execute("TRUNCATE `table_name`");
}
}
请注意, 你可以运行简单查询或使用理论模型。
编码愉快!
评论前必须登录!
注册