Điều này sẽ làm việc cho bạn:
$collection = $this->collectionFactory->create();
$collection->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()]);
$collection->setVisibility($this->productVisibility->getVisibleInSiteIds());
Các lớp được sử dụng là:
/**
* @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
*/
protected $collectionFactory;
/**
* @var \Magento\Catalog\Model\Product\Attribute\Source\Status
*/
protected $productStatus;
/**
* @var \Magento\Catalog\Model\Product\Visibility
*/
protected $productVisibility;
Xem lại các lớp này để kiểm tra các phương thức khác để có được các giá trị trạng thái hoặc khả năng hiển thị.
Tuy nhiên, xem lại khái niệm về kho lưu trữ, theo như tôi thấy Magento 2 khuyên bạn nên sử dụng kho lưu trữ để truy cập dữ liệu sản phẩm thay vì sử dụng bộ sưu tập. Ví dụ:
$searchCriteria = $this->searchCriteriaBuilder->create();
$products = $this->productRepository->getList($searchCriteria)->getItems();