Extbase:
authorSebastian Kurfürst <sebastian@typo3.org>
Sat, 28 Mar 2009 14:54:41 +0000 (14:54 +0000)
committerSebastian Kurfürst <sebastian@typo3.org>
Sat, 28 Mar 2009 14:54:41 +0000 (14:54 +0000)
* Arguments: we now support default arguments

typo3/sysext/extbase/Classes/MVC/Controller/ActionController.php
typo3/sysext/extbase/Classes/MVC/Controller/Argument.php
typo3/sysext/extbase/Classes/MVC/Controller/Arguments.php

index 0c980f3..657b5f6 100644 (file)
@@ -116,7 +116,9 @@ class Tx_ExtBase_MVC_Controller_ActionController extends Tx_ExtBase_MVC_Controll
                                        break;
                        }
 
-                       $this->arguments->addNewArgument($parameterName, $dataType, ($parameterInfo['optional'] === FALSE));
+                       $defaultValue = (isset($parameterInfo['defaultValue']) ? $parameterInfo['defaultValue'] : NULL);
+
+                       $this->arguments->addNewArgument($parameterName, $dataType, ($parameterInfo['optional'] === FALSE), $defaultValue);
                }
        }
 
index 3bbc20d..433e2c0 100644 (file)
@@ -63,6 +63,12 @@ class Tx_ExtBase_MVC_Controller_Argument {
        protected $value = NULL;
 
        /**
+        * Default value. Used if argument is optional.
+        * @var mixed
+        */
+       protected $defaultValue = NULL;
+
+       /**
         * The argument is valid
         * @var boolean
         */
@@ -142,6 +148,16 @@ class Tx_ExtBase_MVC_Controller_Argument {
        }
 
        /**
+        * Sets the default value of the argument
+        *
+        * @param mixed $defaultValue Default value
+        * @return void
+        */
+       public function setDefaultValue($defaultValue) {
+               $this->defaultValue = $defaultValue;
+       }
+
+       /**
         * Sets the data type of this argument's value
         *
         * @param string $dataType: Name of the data type
@@ -152,7 +168,7 @@ class Tx_ExtBase_MVC_Controller_Argument {
                // TODO Make validator path and class names configurable
                $dataTypeValidatorClassName = 'Tx_ExtBase_Validation_Validator_' . $this->dataType;
                $classFilePathAndName = t3lib_extMgm::extPath('extbase') . 'Classes/Validation/Validator/' . $this->dataType . '.php';
-               if (isset($classFilePathAndName) && file_exists($classFilePathAndName)) {                       
+               if (isset($classFilePathAndName) && file_exists($classFilePathAndName)) {
                        require_once($classFilePathAndName);
                        $this->datatypeValidator = t3lib_div::makeInstance($dataTypeValidatorClassName);
                }
@@ -208,7 +224,11 @@ class Tx_ExtBase_MVC_Controller_Argument {
         * @return object The value of this argument - if none was set, NULL is returned
         */
        public function getValue() {
-               return $this->value;
+               if ($this->value === NULL) {
+                       return $this->defaultValue;
+               } else {
+                       return $this->value;
+               }
        }
 
        /**
@@ -223,7 +243,7 @@ class Tx_ExtBase_MVC_Controller_Argument {
        /**
         * undocumented function
         *
-        * @param string $value 
+        * @param string $value
         * @return boolean TRUE if the value is valid for this argument, otherwise FALSE
         */
        protected function isValidValueForThisArgument($value) {
@@ -233,7 +253,7 @@ class Tx_ExtBase_MVC_Controller_Argument {
                if ($this->getValidator() !== NULL) {
                        $isValid &= $this->getValidator()->isValid($value, $validatorErrors);
                } elseif ($this->getDatatypeValidator() !== NULL) {
-                       $isValid = $this->getDatatypeValidator()->isValid($value, $validatorErrors);                    
+                       $isValid = $this->getDatatypeValidator()->isValid($value, $validatorErrors);
                } else {
                        throw new Tx_ExtBase_Validation_Exception_NoValidatorFound('No appropriate validator for the argument "' . $this->getName() . '" was found.', 1235748909);
                }
@@ -254,7 +274,7 @@ class Tx_ExtBase_MVC_Controller_Argument {
        public function isValid() {
                return $this->isValid;
        }
-       
+
        /**
         * Add an initialization error (e.g. a mapping error)
         *
@@ -303,7 +323,7 @@ class Tx_ExtBase_MVC_Controller_Argument {
        public function getDatatypeValidator() {
                return $this->datatypeValidator;
        }
-       
+
        /**
         * Create and set a validator chain
         *
@@ -323,7 +343,7 @@ class Tx_ExtBase_MVC_Controller_Argument {
                }
                return $this;
        }
-       
+
        /**
         * Set the uid for the argument.
         *
index 0672be5..39cb2ca 100644 (file)
@@ -114,11 +114,13 @@ class Tx_ExtBase_MVC_Controller_Arguments extends ArrayObject {
         * @param string $name Name of the argument
         * @param string $dataType Name of one of the built-in data types
         * @param boolean $isRequired TRUE if this argument should be marked as required
+        * @param mixed $defaultValue Default value of the argument. Only makes sense if $isRequired==FALSE
         * @return Tx_ExtBase_MVC_Controller_Argument The new argument
         */
-       public function addNewArgument($name, $dataType = 'Text', $isRequired = FALSE) {
+       public function addNewArgument($name, $dataType = 'Text', $isRequired = FALSE, $defaultValue = NULL) {
                $argument = new Tx_ExtBase_MVC_Controller_Argument($name, $dataType);
                $argument->setRequired($isRequired);
+               $argument->setDefaultValue($defaultValue);
                $this->addArgument($argument);
                return $argument;
        }