我第一次向你展示我的课程: 正如你所看到的,我重复了几次$ versionId param,因为所有方法都需要它。我问自己是否有一种方法可以将其分解,因此重复次数较少。
<?php
class Admin_Model_Version
{
private $_db;
private $_versionId;
private $_path;
public function __construct()
{
}
/**
* Récupère l'objet de la table version.
*
* @return Zend_Db_Table
*/
public function getDb()
{
if(!isset($this->_db))
{
$this->_db = new Admin_Model_DbTable_Version();
}
return $this->_db;
}
/**
* Retourne toutes les versions d'un projet.
*
* @param integer $versionId
*/
public function getVersions($projectId)
{
$db = $this->getDb();
$select = $db->select();
return $select
->where("project_idproject = ?", $projectId)
->query()->fetchAll();
}
public function getVersionPath($versionId)
{
$root = realpath(dirname($_SERVER['SCRIPT_FILENAME']) . "/../");
$patrimonyName = $this->getPatrimonyRecordByVersionId($versionId)->name_patrimony;
$projectName = $this->getProjectRecordByVersionId($versionId)->name_project;
$versionName = $this->getVersionRecordByVersionId($versionId)->lab_version;
return $root . "/data/projects/" . $patrimonyName . "/" . $projectName . "/" . $versionName . "/";
}
/**
* Vérifie si la version possède un repertoire de travail.
*
* Tous les répertoires de travail sont dans le répertoire /data/projects/
*/
public function hasVersionDirectory($versionId)
{
$versionPath = $this->getVersionPath($versionId);
// Si le chemin n'existe pas retourner une exception.
if(!realpath($versionPath))
{
throw new Exception("<b>Admin_Model_Version</b> " . __LINE__ . " : Le répertoire n'existe pas!");
return false;
}
else
{
return true;
}
}
public function getPatrimonyRecordByVersionId($versionId)
{
$db = $this->getDb();
// setIntegrityCheck(false) is required for join
$row = $db->select()->setIntegrityCheck(false);
return $row->from(array('ve' => 'version'), array())
->join(array('pr' => 'project'), 've.project_idproject = pr.idproject', array())
->join(array('pa' => 'patrimony'), 'pa.idpatrimony = pr.patrimony_idpatrimony')
->where('ve.idversion = ?', $versionId)
->query()->fetchObject();
}
public function getProjectRecordByVersionId($versionId)
{
$db = $this->getDb();
// setIntegrityCheck(false) is required for join
$row = $db->select()->setIntegrityCheck(false);
return $row->from(array('ve' => 'version'), array())
->join(array('pr' => 'project'), 've.project_idproject = pr.idproject')
->where('ve.idversion = ?', $versionId)
->query()->fetchObject();
}
public function getVersionRecordByVersionId($versionId)
{
$db = $this->getDb();
// setIntegrityCheck(false) is required for join
$row = $db->select();
$row->where('idversion = ?', $versionId);
return $row->query()->fetchObject();
}
/**
* Crée le répertoire de travail avec comme chemin le nom du patrimoine
* suivi du nom de projet et du nom de version.
*/
public function createHome($versionId)
{
$path = $this->getVersionPath($versionId);
Zend_Registry::get('firephp')->info($path);
if(!mkdir($path, 0755, true))
{
throw new Exception(__METHOD__ . "can't create directory");
}
}
public function hasDirectorySRC($versionId)
{
$path =
}
public function hasDirectoryHTML($versionId)
{
}
public function hasDirectoryXML($versionId)
{
}
public function hasDirectorySVG($versionId)
{
}
}
THX
答案 0 :(得分:1)
很容易说“把它变成对象属性”,但这样做不合适,因为这个类的目的是处理数据库。让getVersions()
返回一个其他类型对象的数组可能会更好,这些对象将封装版本ID并改为使用各种与版本ID相关的方法。