3 * Zend Framework (http://framework.zend.com/)
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
6 * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
7 * @license http://framework.zend.com/license/new-bsd New BSD License
10 namespace Zend\Feed\Writer
;
14 abstract class FeedFactory
17 * Create and return a Feed based on data provided.
19 * @param array|Traversable $data
20 * @throws Exception\InvalidArgumentException
23 public static function factory($data)
25 if (!is_array($data) && !$data instanceof Traversable
) {
26 throw new Exception\
InvalidArgumentException(sprintf(
27 '%s expects an array or Traversable argument; received "%s"',
29 (is_object($data) ?
get_class($data) : gettype($data))
35 foreach ($data as $key => $value) {
37 $key = static::convertKey($key);
38 $method = 'set' . $key;
39 if (method_exists($feed, $method)) {
42 if (!is_array($value)) {
46 if (!array_key_exists('link', $value) ||
!array_key_exists('type', $value)) {
47 // Need both keys to set this correctly
50 $feed->setFeedLink($value['link'], $value['type']);
53 $feed->$method($value);
60 if ('entries' == $key) {
61 static::createEntries($value, $feed);
75 protected static function convertKey($key)
77 $key = str_replace('_', '', strtolower($key));
82 * Create and attach entries to a feed
84 * @param array|Traversable $entries
86 * @throws Exception\InvalidArgumentException
89 protected static function createEntries($entries, Feed
$feed)
91 if (!is_array($entries) && !$entries instanceof Traversable
) {
92 throw new Exception\
InvalidArgumentException(sprintf(
93 '%s::factory expects the "entries" value to be an array or Traversable; received "%s"',
95 (is_object($entries) ?
get_class($entries) : gettype($entries))
99 foreach ($entries as $data) {
100 if (!is_array($data) && !$data instanceof Traversable
&& !$data instanceof Entry
) {
101 throw new Exception\
InvalidArgumentException(sprintf(
102 '%s expects an array, Traversable, or Zend\Feed\Writer\Entry argument; received "%s"',
104 (is_object($data) ?
get_class($data) : gettype($data))
108 // Use case 1: Entry item
109 if ($data instanceof Entry
) {
110 $feed->addEntry($data);
114 // Use case 2: iterate item and populate entry
115 $entry = $feed->createEntry();
116 foreach ($data as $key => $value) {
117 $key = static::convertKey($key);
118 $method = 'set' . $key;
119 if (!method_exists($entry, $method)) {
122 $entry->$method($value);
124 $feed->addEntry($entry);