RenderableController.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace Dcat\Admin\Http\Controllers;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Contracts\LazyRenderable;
  5. use Dcat\Admin\Support\Helper;
  6. use Illuminate\Http\Request;
  7. class RenderableController
  8. {
  9. public function handle(Request $request)
  10. {
  11. $this->initTranslation($request);
  12. $renderable = $this->newRenderable($request);
  13. if (method_exists($renderable, 'passesAuthorization') && ! $renderable->passesAuthorization()) {
  14. return $renderable->failedAuthorization();
  15. }
  16. $this->addScript();
  17. $this->forgetDefaultAssets();
  18. return $this->render($renderable);
  19. }
  20. protected function render(LazyRenderable $renderable)
  21. {
  22. $asset = Admin::asset();
  23. return Helper::render($renderable->render())
  24. .Admin::html()
  25. .$asset->jsToHtml()
  26. .$asset->cssToHtml()
  27. .$asset->scriptToHtml()
  28. .$asset->styleToHtml();
  29. }
  30. protected function initTranslation(Request $request)
  31. {
  32. if ($path = $request->get('_trans_')) {
  33. Admin::translation($path);
  34. }
  35. }
  36. protected function newRenderable(Request $request): LazyRenderable
  37. {
  38. $class = $request->get('renderable');
  39. $class = str_replace('_', '\\', $class);
  40. $renderable = new $class();
  41. $renderable->payload($request->all());
  42. if (method_exists($renderable, 'requireAssets')) {
  43. $renderable->requireAssets();
  44. }
  45. return $renderable;
  46. }
  47. protected function addScript()
  48. {
  49. // 等待JS脚本加载完成
  50. Admin::script('Dcat.wait()', true);
  51. }
  52. protected function forgetDefaultAssets()
  53. {
  54. Admin::baseJs([], false);
  55. Admin::baseCss([], false);
  56. Admin::fonts([]);
  57. }
  58. }