Action.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. /**
  3. *
  4. * Cube Framework $Id$ 7kQ+aNSLAmr/FfwWyN0i0tp7S2YkJIUKiq+1OFhiBBg=
  5. *
  6. * @link http://codecu.be/framework
  7. * @copyright Copyright (c) 2015 CodeCube SRL
  8. * @license http://codecu.be/framework/license Commercial License
  9. *
  10. * @version 1.4
  11. */
  12. /**
  13. * helper that renders a controller action
  14. */
  15. namespace Cube\View\Helper;
  16. use Cube\Controller\Front;
  17. class Action extends AbstractHelper
  18. {
  19. /**
  20. *
  21. * request object
  22. *
  23. * @var \Cube\Controller\Request\AbstractRequest
  24. */
  25. protected $_request;
  26. /**
  27. *
  28. * response object
  29. *
  30. * @var \Cube\Http\Response
  31. */
  32. protected $_response;
  33. /**
  34. *
  35. * dispatcher object
  36. *
  37. * @var \Cube\Controller\Dispatcher
  38. */
  39. protected $_dispatcher;
  40. /**
  41. *
  42. * class constructor
  43. */
  44. public function __construct()
  45. {
  46. $front = Front::getInstance();
  47. $this->_request = clone $front->getRequest();
  48. $this->_response = clone $front->getResponse();
  49. $this->_dispatcher = clone $front->getDispatcher();
  50. }
  51. /**
  52. * Retrieve rendered contents of a controller action
  53. *
  54. * If the action results in a forward or redirect, returns empty string.
  55. *
  56. * @param string $action
  57. * @param string $controller
  58. * @param string $module Defaults to default module
  59. * @param array $params
  60. *
  61. * @return string
  62. */
  63. public function action($action, $controller, $module = null, array $params = array())
  64. {
  65. $request = clone $this->_request;
  66. $this->_response->clearBody()
  67. ->clearHeaders();
  68. if ($module === null) {
  69. $module = $request->getModule();
  70. }
  71. if ($params) {
  72. $request->clearParams();
  73. }
  74. $request->setParams($params)
  75. ->setModule($module)
  76. ->setController($controller)
  77. ->setAction($action)
  78. ->setDispatched(true);
  79. $this->_dispatcher->dispatch($request, $this->_response, true);
  80. if (!$request->isDispatched()) {
  81. // || $this->_response->isRedirect()) {
  82. // forwards and redirects render nothing
  83. return '';
  84. }
  85. $response = $this->_response->getBody();
  86. return $response;
  87. }
  88. }