Verzeichnisstruktur phpBB-3.2.0


Veröffentlicht
06.01.2017

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

AbstractHydrator.php

Zuletzt modifiziert: 09.10.2024, 12:57 - Dateigröße: 7.61 KiB


 001  <?php
 002  /**
 003   * Zend Framework (http://framework.zend.com/)
 004   *
 005   * @link      http://github.com/zendframework/zf2 for the canonical source repository
 006   * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 007   * @license   http://framework.zend.com/license/new-bsd New BSD License
 008   */
 009   
 010  namespace Zend\Stdlib\Hydrator;
 011   
 012  use ArrayObject;
 013  use Zend\Stdlib\Exception;
 014  use Zend\Stdlib\Hydrator\Filter\FilterComposite;
 015  use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
 016  use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
 017   
 018  abstract class AbstractHydrator implements
 019      HydratorInterface,
 020      StrategyEnabledInterface,
 021      FilterEnabledInterface,
 022      NamingStrategyEnabledInterface
 023  {
 024      /**
 025       * The list with strategies that this hydrator has.
 026       *
 027       * @var ArrayObject
 028       */
 029      protected $strategies;
 030   
 031      /**
 032       * An instance of NamingStrategyInterface
 033       *
 034       * @var NamingStrategyInterface
 035       */
 036      protected $namingStrategy;
 037   
 038      /**
 039       * Composite to filter the methods, that need to be hydrated
 040       *
 041       * @var Filter\FilterComposite
 042       */
 043      protected $filterComposite;
 044   
 045      /**
 046       * Initializes a new instance of this class.
 047       */
 048      public function __construct()
 049      {
 050          $this->strategies = new ArrayObject();
 051          $this->filterComposite = new FilterComposite();
 052      }
 053   
 054      /**
 055       * Gets the strategy with the given name.
 056       *
 057       * @param string $name The name of the strategy to get.
 058       *
 059       * @throws \Zend\Stdlib\Exception\InvalidArgumentException
 060       * @return StrategyInterface
 061       */
 062      public function getStrategy($name)
 063      {
 064          if (isset($this->strategies[$name])) {
 065              return $this->strategies[$name];
 066          }
 067   
 068          if (!isset($this->strategies['*'])) {
 069              throw new Exception\InvalidArgumentException(sprintf(
 070                  '%s: no strategy by name of "%s", and no wildcard strategy present',
 071                  __METHOD__,
 072                  $name
 073              ));
 074          }
 075   
 076          return $this->strategies['*'];
 077      }
 078   
 079      /**
 080       * Checks if the strategy with the given name exists.
 081       *
 082       * @param string $name The name of the strategy to check for.
 083       * @return bool
 084       */
 085      public function hasStrategy($name)
 086      {
 087          return array_key_exists($name, $this->strategies)
 088                 || array_key_exists('*', $this->strategies);
 089      }
 090   
 091      /**
 092       * Adds the given strategy under the given name.
 093       *
 094       * @param string $name The name of the strategy to register.
 095       * @param StrategyInterface $strategy The strategy to register.
 096       * @return HydratorInterface
 097       */
 098      public function addStrategy($name, StrategyInterface $strategy)
 099      {
 100          $this->strategies[$name] = $strategy;
 101          return $this;
 102      }
 103   
 104      /**
 105       * Removes the strategy with the given name.
 106       *
 107       * @param string $name The name of the strategy to remove.
 108       * @return HydratorInterface
 109       */
 110      public function removeStrategy($name)
 111      {
 112          unset($this->strategies[$name]);
 113          return $this;
 114      }
 115   
 116      /**
 117       * Converts a value for extraction. If no strategy exists the plain value is returned.
 118       *
 119       * @param  string $name  The name of the strategy to use.
 120       * @param  mixed  $value  The value that should be converted.
 121       * @param  mixed  $object The object is optionally provided as context.
 122       * @return mixed
 123       */
 124      public function extractValue($name, $value, $object = null)
 125      {
 126          if ($this->hasStrategy($name)) {
 127              $strategy = $this->getStrategy($name);
 128              $value = $strategy->extract($value, $object);
 129          }
 130          return $value;
 131      }
 132   
 133      /**
 134       * Converts a value for hydration. If no strategy exists the plain value is returned.
 135       *
 136       * @param string $name The name of the strategy to use.
 137       * @param mixed $value The value that should be converted.
 138       * @param array $data The whole data is optionally provided as context.
 139       * @return mixed
 140       */
 141      public function hydrateValue($name, $value, $data = null)
 142      {
 143          if ($this->hasStrategy($name)) {
 144              $strategy = $this->getStrategy($name);
 145              $value = $strategy->hydrate($value, $data);
 146          }
 147          return $value;
 148      }
 149   
 150      /**
 151       * Convert a name for extraction. If no naming strategy exists, the plain value is returned.
 152       *
 153       * @param string $name    The name to convert.
 154       * @param null   $object  The object is optionally provided as context.
 155       * @return mixed
 156       */
 157      public function extractName($name, $object = null)
 158      {
 159          if ($this->hasNamingStrategy()) {
 160              $name = $this->getNamingStrategy()->extract($name, $object);
 161          }
 162          return $name;
 163      }
 164   
 165      /**
 166       * Converts a value for hydration. If no naming strategy exists, the plain value is returned.
 167       *
 168       * @param string $name  The name to convert.
 169       * @param array  $data  The whole data is optionally provided as context.
 170       * @return mixed
 171       */
 172      public function hydrateName($name, $data = null)
 173      {
 174          if ($this->hasNamingStrategy()) {
 175              $name = $this->getNamingStrategy()->hydrate($name, $data);
 176          }
 177          return $name;
 178      }
 179   
 180      /**
 181       * Get the filter instance
 182       *
 183       * @return Filter\FilterComposite
 184       */
 185      public function getFilter()
 186      {
 187          return $this->filterComposite;
 188      }
 189   
 190      /**
 191       * Add a new filter to take care of what needs to be hydrated.
 192       * To exclude e.g. the method getServiceLocator:
 193       *
 194       * <code>
 195       * $composite->addFilter("servicelocator",
 196       *     function ($property) {
 197       *         list($class, $method) = explode('::', $property);
 198       *         if ($method === 'getServiceLocator') {
 199       *             return false;
 200       *         }
 201       *         return true;
 202       *     }, FilterComposite::CONDITION_AND
 203       * );
 204       * </code>
 205       *
 206       * @param string $name Index in the composite
 207       * @param callable|Filter\FilterInterface $filter
 208       * @param int $condition
 209       * @return Filter\FilterComposite
 210       */
 211      public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
 212      {
 213          return $this->filterComposite->addFilter($name, $filter, $condition);
 214      }
 215   
 216      /**
 217       * Check whether a specific filter exists at key $name or not
 218       *
 219       * @param string $name Index in the composite
 220       * @return bool
 221       */
 222      public function hasFilter($name)
 223      {
 224          return $this->filterComposite->hasFilter($name);
 225      }
 226   
 227      /**
 228       * Remove a filter from the composition.
 229       * To not extract "has" methods, you simply need to unregister it
 230       *
 231       * <code>
 232       * $filterComposite->removeFilter('has');
 233       * </code>
 234       *
 235       * @param $name
 236       * @return Filter\FilterComposite
 237       */
 238      public function removeFilter($name)
 239      {
 240          return $this->filterComposite->removeFilter($name);
 241      }
 242   
 243      /**
 244       * Adds the given naming strategy
 245       *
 246       * @param NamingStrategyInterface $strategy The naming to register.
 247       * @return self
 248       */
 249      public function setNamingStrategy(NamingStrategyInterface $strategy)
 250      {
 251          $this->namingStrategy = $strategy;
 252   
 253          return $this;
 254      }
 255   
 256      /**
 257       * Gets the naming strategy.
 258       *
 259       * @return NamingStrategyInterface
 260       */
 261      public function getNamingStrategy()
 262      {
 263          return $this->namingStrategy;
 264      }
 265   
 266      /**
 267       * Checks if a naming strategy exists.
 268       *
 269       * @return bool
 270       */
 271      public function hasNamingStrategy()
 272      {
 273          return isset($this->namingStrategy);
 274      }
 275   
 276      /**
 277       * Removes the naming strategy
 278       *
 279       * @return self
 280       */
 281      public function removeNamingStrategy()
 282      {
 283          $this->namingStrategy = null;
 284   
 285          return $this;
 286      }
 287  }
 288