CategoryController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace App\Http\Controllers\Admin\TCM;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\ModelStatusEnum;
  5. use App\Repositories\Enums\ResponseCodeEnum;
  6. use App\Repositories\Models\TCM\Category;
  7. use Illuminate\Http\Request;
  8. use App\Http\Requests;
  9. use Jiannei\Response\Laravel\Support\Facades\Response;
  10. use Prettus\Validator\Contracts\ValidatorInterface;
  11. use Prettus\Validator\Exceptions\ValidatorException;
  12. use App\Contracts\Repositories\TCM\CategoryRepository;
  13. use App\Repositories\Validators\TCM\CategoryValidator;
  14. /**
  15. * Class CategoriesController.
  16. *
  17. * @package namespace App\Http\Controllers\TCM;
  18. */
  19. class CategoryController extends Controller
  20. {
  21. /**
  22. * @var CategoryRepository
  23. */
  24. protected $repository;
  25. /**
  26. * @var CategoryValidator
  27. */
  28. protected $validator;
  29. /**
  30. * CategoriesController constructor.
  31. *
  32. * @param CategoryRepository $repository
  33. * @param CategoryValidator $validator
  34. */
  35. public function __construct(CategoryRepository $repository, CategoryValidator $validator)
  36. {
  37. $this->repository = $repository;
  38. $this->validator = $validator;
  39. }
  40. public function index(Request $request)
  41. {
  42. $this->validate($request, ['key' => 'required']);
  43. $categories = $this->repository->where('parent_id', Category::query()->where('status', ModelStatusEnum::OK)->where('key', $request->get('key'))->value('id'))->orderByDesc('sort')->get(['id', 'title']);
  44. return Response::success($categories);
  45. }
  46. public function store(Request $request)
  47. {
  48. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE));
  49. try {
  50. $category = $this->repository->create($request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE))));
  51. return Response::success($category);
  52. } catch (\Exception $e) {
  53. return $this->errorStore($e);
  54. }
  55. }
  56. public function update(Request $request, $id)
  57. {
  58. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_UPDATE));
  59. try {
  60. $category = $this->repository->update($request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_UPDATE))), $id);
  61. return Response::success($category);
  62. } catch (\Exception $e) {
  63. $this->errorStore($e);
  64. }
  65. }
  66. public function destroy($id)
  67. {
  68. try {
  69. $re = $this->repository->where('parent_id', '>', 0)->where('id', $id)->delete();
  70. if ($re) {
  71. return Response::success(null, T('successfully delete.'));
  72. }
  73. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  74. } catch (\Exception $exception) {
  75. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  76. }
  77. }
  78. public function tree()
  79. {
  80. $departments = $this->repository->orderByDesc('sort')->get()->append('parent_name')->toArray();
  81. return Response::success(toTree($departments));
  82. }
  83. public function lists(Request $request)
  84. {
  85. if ($id = $request->get('id', false)) {
  86. $category = $this->repository->skipPresenter()->where('status', ModelStatusEnum::OK)->where('parent_id', $id)->get(['id', 'name']);
  87. } else {
  88. $category = $this->repository->skipPresenter()->where('status', ModelStatusEnum::OK)->where('parent_id', 0)->get(['id', 'name']);
  89. }
  90. return Response::success($category);
  91. }
  92. }