GoodsDetailManager.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2017/6/27
  6. * Time: 上午10:14
  7. */
  8. namespace app\frontend\modules\goods\services;
  9. use app\framework\Repository\Collection;
  10. use app\frontend\models\Goods;
  11. use app\frontend\widgets\WidgetsConfig;
  12. use Illuminate\Container\Container;
  13. use function foo\func;
  14. class GoodsDetailManager extends Container
  15. {
  16. private $init;
  17. public function __construct()
  18. {
  19. $this->bind('Goods',function ($goodsDetail,$attributes = []) {
  20. $goods_model = \app\common\modules\shop\ShopConfig::current()->get('goods.models.commodity_classification');
  21. return new $goods_model($attributes);
  22. });
  23. $this->singleton('DetailsCollection',function ($goodsDetail) {
  24. return new Collection(array_merge([GoodsDetailService::class],array_values(WidgetsConfig::getConfig('goods_detail'))));
  25. });
  26. }
  27. //根据商品plugin_id取出对应的商品详情类
  28. public function setDetailInstance($goods_model)
  29. {
  30. $this->initDetailInstance();
  31. $this->singleton('GoodsDetailInstance',function ($goodsDetail) use ($goods_model) {
  32. $instance = $this->make('DetailsCollection')->where('plugin_id',$goods_model->plugin_id)->first();
  33. if (empty($instance)) {
  34. $instance = $this->make('DetailsCollection')->where('plugin_id', 0)->first();
  35. }
  36. return $instance;
  37. });
  38. }
  39. //实例化所有商品详情类
  40. private function initDetailInstance()
  41. {
  42. if ($this->init == true) {
  43. return;
  44. }
  45. $this->make('DetailsCollection')->transform(function ($detail) {
  46. return new $detail();
  47. });
  48. $this->init = true;
  49. }
  50. }