Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CategoryResolver.php
Go to the documentation of this file.
1 <?php
7 namespace Magento\Setup\Fixtures;
8 
10 use Magento\Catalog\Model\CategoryFactory;
11 use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
13 
18 {
22  private $storeManager;
23 
27  private $categoryFactory;
28 
32  private $collectionFactory;
33 
37  private $categoryRepository;
38 
42  private $categories = [];
43 
51  public function __construct(
52  StoreManager $storeManager,
53  CategoryFactory $categoryFactory,
54  CategoryRepositoryInterface $categoryRepository,
55  CollectionFactory $collectionFactory
56  ) {
57  $this->storeManager = $storeManager;
58  $this->categoryFactory = $categoryFactory;
59  $this->collectionFactory = $collectionFactory;
60  $this->categoryRepository = $categoryRepository;
61  }
62 
70  public function getCategory($websiteId, $categoryName)
71  {
72  $categoryKey = $websiteId . $categoryName;
73 
74  if (!isset($this->categories[$categoryKey])) {
75  $website = $this->storeManager->getWebsite($websiteId);
76  $rootCategoryId = $website->getDefaultGroup()->getRootCategoryId();
77  $website->getDefaultGroup()->getStoreId();
78  $category = $this->collectionFactory->create()
79  ->addFieldToFilter('parent_id', $rootCategoryId)
80  ->addFieldToFilter('name', $categoryName)
81  ->fetchItem();
82  if ($category && $category->getId()) {
83  $this->categories[$categoryKey] = $category->getId();
84  } else {
85  $category = $this->categoryFactory->create(
86  [
87  'data' => [
88  'parent_id' => $rootCategoryId,
89  'name' => $categoryName,
90  'position' => 1,
91  'is_active' => true,
92  'available_sort_by' => ['position', 'name'],
93  'url_key' => $categoryName . '-' . $websiteId
94  ]
95  ]
96  );
97  $category = $this->categoryRepository->save($category);
98  $this->categories[$categoryKey] = $category->getId();
99  }
100  }
101 
102  return $this->categories[$categoryKey];
103  }
104 }
$storeManager
getCategory($websiteId, $categoryName)
__construct(StoreManager $storeManager, CategoryFactory $categoryFactory, CategoryRepositoryInterface $categoryRepository, CollectionFactory $collectionFactory)