[ Index ]
 

Code source de Symfony 1.0.0

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/generator/ -> sfGenerator.class.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of the symfony package.
   5   * (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
   6   * 
   7   * For the full copyright and license information, please view the LICENSE
   8   * file that was distributed with this source code.
   9   */
  10  
  11  /**
  12   * sfGenerator is the abstract base class for all generators.
  13   *
  14   * @package    symfony
  15   * @subpackage generator
  16   * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  17   * @version    SVN: $Id: sfGenerator.class.php 3513 2007-02-19 13:42:16Z fabien $
  18   */
  19  abstract class sfGenerator
  20  {
  21    protected
  22      $generatorClass      = '',
  23      $generatorManager    = null,
  24      $generatedModuleName = '',
  25      $theme               = 'default',
  26      $moduleName          = '';
  27  
  28    /**
  29     * Initializes the current sfGenerator instance.
  30     *
  31     * @param sfGeneratorManager A sfGeneratorManager instance
  32     */
  33    public function initialize($generatorManager)
  34    {
  35      $this->generatorManager = $generatorManager;
  36    }
  37  
  38    /**
  39     * Generates classes and templates.
  40     *
  41     * @param array An array of parameters
  42     *
  43     * @return string The cache for the configuration file
  44     */
  45    abstract public function generate($params = array());
  46  
  47    /**
  48     * Generates PHP files for a given module name.
  49     *
  50     * @param string The name of module name to generate
  51     * @param array  A list of template files to generate
  52     * @param array  A list of configuration files to generate
  53     */
  54    protected function generatePhpFiles($generatedModuleName, $templateFiles = array(), $configFiles = array())
  55    {
  56      // eval actions file
  57      $retval = $this->evalTemplate('actions/actions.class.php');
  58  
  59      // save actions class
  60      $this->getGeneratorManager()->getCache()->set('actions.class.php', $generatedModuleName.DIRECTORY_SEPARATOR.'actions', $retval);
  61  
  62      // generate template files
  63      foreach ($templateFiles as $template)
  64      {
  65        // eval template file
  66        $retval = $this->evalTemplate('templates/'.$template);
  67  
  68        // save template file
  69        $this->getGeneratorManager()->getCache()->set($template, $generatedModuleName.DIRECTORY_SEPARATOR.'templates', $retval);
  70      }
  71  
  72      // generate config files
  73      foreach ($configFiles as $config)
  74      {
  75        // eval config file
  76        $retval = $this->evalTemplate('config/'.$config);
  77  
  78        // save config file
  79        $this->getGeneratorManager()->getCache()->set($config, $generatedModuleName.DIRECTORY_SEPARATOR.'config', $retval);
  80      }
  81    }
  82  
  83    /**
  84     * Evaluates a template file.
  85     *
  86     * @param string The template file path
  87     *
  88     * @return string The evaluated template
  89     */
  90    protected function evalTemplate($templateFile)
  91    {
  92      $templateFile = sfLoader::getGeneratorTemplate($this->getGeneratorClass(), $this->getTheme(), $templateFile);
  93  
  94      // eval template file
  95      ob_start();
  96      require($templateFile);
  97      $content = ob_get_clean();
  98  
  99      // replace [?php and ?]
 100      $content = $this->replacePhpMarks($content);
 101  
 102      $retval = "<?php\n".
 103                "// auto-generated by ".$this->getGeneratorClass()."\n".
 104                "// date: %s\n?>\n%s";
 105      $retval = sprintf($retval, date('Y/m/d H:i:s'), $content);
 106  
 107      return $retval;
 108    }
 109  
 110    /**
 111     * Replaces PHP marks by <?php ?>.
 112     *
 113     * @param string The PHP code
 114     *
 115     * @return string The converted PHP code
 116     */
 117    protected function replacePhpMarks($text)
 118    {
 119      // replace [?php and ?]
 120      return str_replace(array('[?php', '[?=', '?]'), array('<?php', '<?php echo', '?>'), $text);
 121    }
 122  
 123    /**
 124     * Gets the generator class.
 125     *
 126     * @return string The generator class
 127     */
 128    public function getGeneratorClass()
 129    {
 130      return $this->generatorClass;
 131    }
 132  
 133    /**
 134     * Sets the generator class.
 135     *
 136     * @param string The generator class
 137     */
 138    public function setGeneratorClass($generator_class)
 139    {
 140      $this->generatorClass = $generator_class;
 141    }
 142  
 143    /**
 144     * Gets the sfGeneratorManager instance.
 145     *
 146     * @return string The sfGeneratorManager instance
 147     */
 148    protected function getGeneratorManager()
 149    {
 150      return $this->generatorManager;
 151    }
 152  
 153    /**
 154     * Gets the module name of the generated module.
 155     *
 156     * @return string The module name
 157     */
 158    public function getGeneratedModuleName()
 159    {
 160      return $this->generatedModuleName;
 161    }
 162  
 163    /**
 164     * Sets the module name of the generated module.
 165     *
 166     * @param string The module name
 167     */
 168    public function setGeneratedModuleName($module_name)
 169    {
 170      $this->generatedModuleName = $module_name;
 171    }
 172  
 173    /**
 174     * Gets the module name.
 175     *
 176     * @return string The module name
 177     */
 178    public function getModuleName()
 179    {
 180      return $this->moduleName;
 181    }
 182  
 183    /**
 184     * Sets the module name.
 185     *
 186     * @param string The module name
 187     */
 188    public function setModuleName($module_name)
 189    {
 190      $this->moduleName = $module_name;
 191    }
 192  
 193    /**
 194     * Gets the theme name.
 195     *
 196     * @return string The theme name
 197     */
 198    public function getTheme()
 199    {
 200      return $this->theme;
 201    }
 202  
 203    /**
 204     * Sets the theme name.
 205     *
 206     * @param string The theme name
 207     */
 208    public function setTheme($theme)
 209    {
 210      $this->theme = $theme;
 211    }
 212  
 213    /**
 214     * Calls methods defined via the sfMixer class.
 215     *
 216     * @param string The method name
 217     * @param array  The method arguments
 218     *
 219     * @return mixed The returned value of the called method
 220     *
 221     * @see sfMixer
 222     */
 223    public function __call($method, $arguments)
 224    {
 225      if (!$callable = sfMixer::getCallable('sfGenerator:'.$method))
 226      {
 227        throw new sfException(sprintf('Call to undefined method sfGenerator::%s', $method));
 228      }
 229  
 230      array_unshift($arguments, $this);
 231  
 232      return call_user_func_array($callable, $arguments);
 233    }
 234  }


Généré le : Fri Mar 16 22:42:14 2007 par Balluche grâce à PHPXref 0.7