HasNestedResource.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace Dcat\Admin\Http\Controllers;
  3. use Dcat\Admin\Layout\Content;
  4. trait HasNestedResource
  5. {
  6. /**
  7. * The id of the nested resource's child model.
  8. *
  9. * @var string|int
  10. */
  11. protected $nestedResourceId;
  12. /**
  13. * The parameter name for the nested resource's route.
  14. *
  15. * @var string
  16. */
  17. protected $routeParameterName;
  18. /**
  19. * {@inheritdoc}
  20. */
  21. public function show($id, Content $content)
  22. {
  23. return parent::show($this->getNestedResourceId(), $content);
  24. }
  25. /**
  26. * {@inheritdoc}
  27. */
  28. public function edit($id, Content $content)
  29. {
  30. return parent::edit($this->getNestedResourceId(), $content);
  31. }
  32. /**
  33. * {@inheritdoc}
  34. */
  35. public function update($id)
  36. {
  37. return parent::update($this->getNestedResourceId());
  38. }
  39. /**
  40. * {@inheritdoc}
  41. */
  42. public function destroy($id)
  43. {
  44. return parent::destroy($this->getNestedResourceId());
  45. }
  46. /**
  47. * @return string|null
  48. */
  49. public function getNestedResourceId()
  50. {
  51. if ($this->nestedResourceId) {
  52. return $this->nestedResourceId;
  53. }
  54. return $this->nestedResourceId = request($this->getRouteParameterName());
  55. }
  56. /**
  57. * @param string|int $id
  58. * @return void
  59. */
  60. public function setNestedResourceId($id)
  61. {
  62. $this->nestedResourceId = $id;
  63. }
  64. /**
  65. * @return string
  66. */
  67. public function getRouteParameterName()
  68. {
  69. if ($this->routeParameterName) {
  70. return $this->routeParameterName;
  71. }
  72. return $this->routeParameterName = last(request()->route()->parameterNames());
  73. }
  74. /**
  75. * @param string $name
  76. * @return void
  77. */
  78. public function setRouteParameterName($name)
  79. {
  80. $this->routeParameterName = (string) $name;
  81. }
  82. }