Fabien Potencier 15 лет назад
Родитель
Сommit
0c2b2bdbbb

+ 28 - 0
src/Symfony/Components/Console/Application.php

@@ -14,6 +14,9 @@ use Symfony\Components\Console\Output\ConsoleOutput;
 use Symfony\Components\Console\Command\Command;
 use Symfony\Components\Console\Command\HelpCommand;
 use Symfony\Components\Console\Command\ListCommand;
+use Symfony\Components\Console\Helper\HelperSet;
+use Symfony\Components\Console\Helper\FormatterHelper;
+use Symfony\Components\Console\Helper\DialogHelper;
 
 /*
  * This file is part of the symfony framework.
@@ -53,6 +56,7 @@ class Application
   protected $catchExceptions;
   protected $autoExit;
   protected $definition;
+  protected $helperSet;
 
   /**
    * Constructor.
@@ -68,6 +72,10 @@ class Application
     $this->autoExit = true;
     $this->commands = array();
     $this->aliases = array();
+    $this->helperSet = new HelperSet(array(
+      new FormatterHelper(),
+      new DialogHelper(),
+    ));
 
     $this->addCommand(new HelpCommand());
     $this->addCommand(new ListCommand());
@@ -200,6 +208,26 @@ class Application
     return is_numeric($statusCode) ? $statusCode : 0;
   }
 
+  /**
+   * Set a helper set to be used with the command.
+   *
+   * @param HelperSet $helperSet The helper set
+   */
+  public function setHelperSet(HelperSet $helperSet)
+  {
+    $this->helperSet = $helperSet;
+  }
+
+  /**
+   * Get the helper set associated with the command
+   *
+   * @return HelperSet The HelperSet isntance associated with this command
+   */
+  public function getHelperSet()
+  {
+    return $this->helperSet;
+  }
+
   /**
    * Gets the InputDefinition related to this Application.
    *

+ 6 - 42
src/Symfony/Components/Console/Command/Command.php

@@ -8,9 +8,6 @@ use Symfony\Components\Console\Input\InputArgument;
 use Symfony\Components\Console\Input\InputInterface;
 use Symfony\Components\Console\Output\OutputInterface;
 use Symfony\Components\Console\Application;
-use Symfony\Components\Console\Helper\HelperSet;
-use Symfony\Components\Console\Helper\FormatterHelper;
-use Symfony\Components\Console\Helper\InteractHelper;
 
 /*
  * This file is part of the symfony framework.
@@ -45,26 +42,15 @@ class Command
   /**
    * Constructor.
    *
-   * @param string          $name
-   * @param HelperSet       $helperSet A helper set instance
+   * @param string $name The name of the command
    */
-  public function __construct($name = null, HelperSet $helperSet = null)
+  public function __construct($name = null)
   {
     $this->definition = new InputDefinition();
     $this->ignoreValidationErrors = false;
     $this->applicationDefinitionMerged = false;
     $this->aliases = array();
 
-    if (null === $helperSet)
-    {
-      $helperSet = new HelperSet(array(
-        new FormatterHelper(),
-        new InteractHelper(),
-      ));
-    }
-
-    $this->setHelperSet($helperSet);
-
     if (null !== $name)
     {
       $this->setName($name);
@@ -393,39 +379,17 @@ class Command
   }
 
   /**
-   * Set a helper set to be used with the command.
-   *
-   * @param HelperSet $helperSet The helper set
-   */
-  public function setHelperSet(HelperSet $helperSet)
-  {
-    $this->helperSet = $helperSet;
-
-    $helperSet->setCommand($this);
-  }
-
-  /**
-   * Get the helper set associated with the command
-   *
-   * @return HelperSet
-   */
-  public function getHelperSet()
-  {
-    return $this->helperSet;
-  }
-
-  /**
-   * Gets a helper value.
+   * Gets a helper instance by name.
    *
-   * @param string $name  The helper name
+   * @param string $name The helper name
    *
    * @return mixed The helper value
    *
    * @throws \InvalidArgumentException if the helper is not defined
    */
-  public function __get($name)
+  protected function getHelper($name)
   {
-    return $this->helperSet->get($name);
+    return $this->application->getHelperSet()->get($name);
   }
 
   /**

+ 11 - 11
src/Symfony/Components/Console/Helper/InteractHelper.php

@@ -14,22 +14,14 @@ use Symfony\Components\Console\Output\OutputInterface;
  */
 
 /**
- * The Interact class provides helpers to interact with the user.
+ * The Dialog class provides helpers to interact with the user.
  *
  * @package    symfony
- * @subpackage cli
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
-class InteractHelper extends Helper
+class DialogHelper extends Helper
 {
-  /**
-   * Returns the helper's canonical name
-   */
-  public function getName()
-  {
-    return 'interact';
-  }
-
   /**
    * Asks a question to the user.
    *
@@ -116,4 +108,12 @@ class InteractHelper extends Helper
     throw $error;
     // @codeCoverageIgnoreEnd
   }
+
+  /**
+   * Returns the helper's canonical name
+   */
+  public function getName()
+  {
+    return 'dialog';
+  }
 }

+ 8 - 9
src/Symfony/Components/Console/Helper/FormatterHelper.php

@@ -20,14 +20,6 @@ namespace Symfony\Components\Console\Helper;
  */
 class FormatterHelper extends Helper
 {
-  /**
-   * Returns the helper's canonical name
-   */
-  public function getName()
-  {
-    return 'formatter';
-  }
-
   /**
    * Formats a message within a section.
    *
@@ -86,5 +78,12 @@ class FormatterHelper extends Helper
   {
     return function_exists('mb_strlen') ? mb_strlen($string) : strlen($string);
   }
-}
 
+  /**
+   * Returns the helper's canonical name
+   */
+  public function getName()
+  {
+    return 'formatter';
+  }
+}

+ 4 - 4
src/Symfony/Components/Console/Helper/Helper.php

@@ -3,19 +3,19 @@
 namespace Symfony\Components\Console\Helper;
 
 /*
- * This file is part of the symfony package.
+ * This file is part of the symfony framework.
  *
  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
  */
 
 /**
  * Helper is the base class for all helper classes.
  *
  * @package    symfony
- * @subpackage templating
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
 abstract class Helper implements HelperInterface

+ 11 - 11
src/Symfony/Components/Console/Helper/HelperInterface.php

@@ -3,30 +3,23 @@
 namespace Symfony\Components\Console\Helper;
 
 /*
- * This file is part of the symfony package.
+ * This file is part of the symfony framework.
  *
  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
  */
 
 /**
  * HelperInterface is the interface all helpers must implement.
  *
  * @package    symfony
- * @subpackage templating
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
 interface HelperInterface
 {
-  /**
-   * Returns the canonical name of this helper.
-   *
-   * @return string The canonical name
-   */
-  function getName();
-
   /**
    * Sets the helper set associated with this helper.
    *
@@ -40,4 +33,11 @@ interface HelperInterface
    * @return HelperSet A HelperSet instance
    */
   function getHelperSet();
+
+  /**
+   * Returns the canonical name of this helper.
+   *
+   * @return string The canonical name
+   */
+  function getName();
 }

+ 4 - 5
src/Symfony/Components/Console/Helper/HelperSet.php

@@ -5,19 +5,19 @@ namespace Symfony\Components\Console\Helper;
 use Symfony\Components\Console\Command\Command;
 
 /*
- * This file is part of the symfony package.
+ * This file is part of the symfony framework.
  *
  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
  *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
  */
 
 /**
  * HelperSet represents a set of helpers to be used with a command.
  *
  * @package    symfony
- * @subpackage templating
+ * @subpackage console
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
 class HelperSet
@@ -102,4 +102,3 @@ class HelperSet
     return $this->command;
   }
 }
-