1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631:
<?php
/**
* MvcCore
*
* This source file is subject to the BSD 3 License
* For the full copyright and license information, please view
* the LICENSE.md file that are distributed with this source code.
*
* @copyright Copyright (c) 2016 Tom Flidr (https://github.com/mvccore)
* @license https://mvccore.github.io/docs/mvccore/5.0.0/LICENCE.md
*/
namespace MvcCore;
/**
* Responsibility - controller lifecycle - data preparing, rendering, response completing.
* - Controller lifecycle dispatching:
* - Handling setup methods after creation from application core dispatching.
* - Calling lifecycle methods (`\MvcCore\Controller::Dispatch();`):
* - `\MvcCore\Controller::Init();`
* - `\MvcCore\Controller::PreDispatch();`
* - Calling routed controller action.
* - `\MvcCore\Controller::Render();`
* - Rendering or no-rendering customization.
* - HTTP responses and redirects managing and customization.
* - Basic error responses rendering.
* - Customization for request termination to write
* and close session, sending response etc.
*
* Template methods (necessary to call parent at method begin):
* - `Init()`
* - Called after controller is created.
* - Session start.
* - Auto initialization for sub controllers.
* - All internal variables initialized, except `\MvcCore\Controller::$view`.
* - `PreDispatch()`
* - Called after `Init()`, before every controller action.
* - `\MvcCore\Controller::$view` property initialization.
* - `Render()`
* - Called after dispatching action has been called.
* - `Controller:Action` view rendering responsibility and response competition.
*
* Important methods:
* - `Url()` - proxy method to build URL by configured routes.
* - `GetParam()` - proxy method to read and clean request param values.
* - `AddChildController()` - method to register child controller (navigations, etc.)
*
* Internal methods and actions:
* - `Render()`
* - Called internally in lifecycle dispatching,
* but it's possible to use it for custom purposes.
* - `Terminate()`
* - Called internally after lifecycle dispatching,
* but it's possible to use it for custom purposes.
* - `Dispatch()`
* - Processing whole controller and sub-controllers lifecycle.
* - `AssetAction()`
* - Handling internal MvcCore HTTP requests
* to get assets from packed application package.
*/
interface IController extends \MvcCore\Controller\IConstants {
/**
* Return always new instance of statically called class, no singleton.
* Always called from `\MvcCore::DispatchControllerAction()` before controller is dispatched,
* or always called in `\MvcCore\Controller::autoInitMembers();` in base controller initialization.
* This is place where to customize any controller creation process,
* before it's created by MvcCore framework to dispatch it.
* @return \MvcCore\Controller
*/
public static function CreateInstance ();
/**
* Try to determinate `\MvcCore\Controller` instance from `debug_bactrace()`,
* where was form created, if no form instance given into form constructor.
* If no previous controller instance founded, `NULL` is returned.
* @return \MvcCore\Controller|NULL
*/
public static function GetCallerControllerInstance ();
/**
* Redirect client browser to another place by `"Location: ..."`
* header and call `\MvcCore\Application::GetInstance()->Terminate();`.
* @param string $location
* @param int $code
* @param string|NULL $reason Any optional text header for reason why.
* @return void
*/
public static function Redirect ($location = '', $code = \MvcCore\IResponse::SEE_OTHER, $reason = NULL);
/**
* Dispatching controller life cycle by given action.
* This is INTERNAL, not TEMPLATE method, internally
* called in `\MvcCore::DispatchControllerAction();`.
* Call this immediately after calling controller methods:
* - `\MvcCore\Controller::__construct()`
* - `\MvcCore\Controller::SetApplication($application)`
* - `\MvcCore\Controller::SetEnvironment($environment)`
* - `\MvcCore\Controller::SetRequest($request)`
* - `\MvcCore\Controller::SetResponse($response)`
* - `\MvcCore\Controller::SetRouter($router)`
* This function automatically complete (through controller lifecycle)
* protected `\MvcCore\Response` object with response headers and content,
* which you can send to client browser by method
* `\MvcCore\Controller::Terminate()` or which you can store
* anywhere in cache to use it later etc.
* @param string $actionName PHP code action name in PascalCase.
* This value is used to call your desired function
* in controller without any change.
* @return void
*/
public function Dispatch ($actionName = "IndexAction");
/**
* TEMPLATE method. Call `parent::Init();` at the method very beginning.
* Application controllers initialization.
* This is best time to initialize language, locale, session etc.
* There is also called auto initialization processing - instance creation
* on each controller class member implementing `\MvcCore\IController`
* and marked in doc comments as `@autoInit`.
* then there is of course called `\MvcCore\Controller::Init();` method on each
* automatically created sub-controller.
* @return void
*/
public function Init ();
/**
* TEMPLATE method. Call `parent::PreDispatch();` at the method very beginning.
* Application pre render common action - always used in application controllers.
* This is best time to define any common properties or common view properties,
* which are the same for multiple actions in controller etc.
* There is also called `\MvcCore\Controller::PreDispatch();` method on each sub-controller.
* @return void
*/
public function PreDispatch ();
/**
* Get param value from `$_GET`, `$_POST` or `php://input`, filtered by
* "rule to keep defined characters only", defined in second argument (by `preg_replace()`).
* Place into second argument only char groups you want to keep.
* Shortcut for: `\MvcCore\Request::GetParam();`
* @param string $name Parameter string name.
* @param string|array|bool $pregReplaceAllowedChars If String - list of regular expression characters to only keep, if array - `preg_replace()` pattern and reverse, if `FALSE`, raw value is returned.
* @param mixed $ifNullValue Default value returned if given param name is null.
* @param string $targetType Target type to retype param value or default if-null value. If param is an array, every param item will be retyped into given target type.
* @return string|\string[]|int|\int[]|bool|\bool[]|array|mixed
*/
public function GetParam ($name = "", $pregReplaceAllowedChars = "a-zA-Z0-9_/\-\.\@");
/**
* Get current application singleton instance object as reference.
* @return \MvcCore\Application
*/
public function GetApplication ();
/**
* Sets up `\MvcCore\Application` singleton object.
* This is INTERNAL, not TEMPLATE method, internally called in
* `\MvcCore::DispatchControllerAction()` before controller is dispatched.
* Usually call this as soon as possible after controller creation.
* @param \MvcCore\Application $application
* @return \MvcCore\Controller
*/
public function SetApplication (\MvcCore\IApplication $application);
/**
* Get environment object to detect and manage environment name.
* @return \MvcCore\Environment
*/
public function GetEnvironment();
/**
* Get current application request object as reference.
* @return \MvcCore\Request
*/
public function GetRequest ();
/**
* Get requested controller name - `"dashed-controller-name"`.
* @return string
*/
public function GetControllerName ();
/**
* Set requested controller name - `"dashed-controller-name"`.
* @param string $controllerName
* @return \MvcCore\Controller
*/
public function SetControllerName ($controllerName);
/**
* Get requested action name - `"dashed-action-name"`.
* @return string
*/
public function GetActionName ();
/**
* Set requested action name - `"dashed-action-name"`.
* @param string $actionName
* @return \MvcCore\Controller
*/
public function SetActionName ($actionName);
/**
* Set environment object to detect and manage environment name.
* This is INTERNAL, not TEMPLATE method.
* @param \MvcCore\Environment $environment
* @return \MvcCore\Controller
*/
public function SetEnvironment (\MvcCore\IEnvironment $environment);
/**
* Sets up `\MvcCore\Request` object and other protected properties.
* This is INTERNAL, not TEMPLATE method, internally called in
* `\MvcCore::DispatchControllerAction();` before controller is dispatched.
* Usually call this as soon as possible after controller creation
* to set up following controller properties:
* - `\MvcCore\Controller::$request`
* - `\MvcCore\Controller::$controllerName`
* - `\MvcCore\Controller::$actionName`
* - `\MvcCore\Controller::$ajax`
* @param \MvcCore\Request $request
* @return \MvcCore\Controller
*/
public function SetRequest (\MvcCore\IRequest $request);
/**
* Get current application response object as reference.
* @return \MvcCore\Response
*/
public function GetResponse ();
/**
* Sets up `\MvcCore\Response` object.
* This is INTERNAL, not TEMPLATE method, internally called in
* `\MvcCore::DispatchControllerAction()` before controller is dispatched.
* Usually call this as soon as possible after controller creation.
* @param \MvcCore\Response $response
* @return \MvcCore\Controller
*/
public function SetResponse (\MvcCore\IResponse $response);
/**
* Get current application router object as reference.
* @return \MvcCore\Router
*/
public function GetRouter ();
/**
* Sets up `\MvcCore\Router` object.
* This is INTERNAL, not TEMPLATE method, internally called in
* `\MvcCore::DispatchControllerAction()` before controller is dispatched.
* Usually call this as soon as possible after controller creation.
* @param \MvcCore\Router $router
* @return \MvcCore\Controller
*/
public function SetRouter (\MvcCore\IRouter$router);
/**
* Get boolean about AJAX request.
* `TRUE` if request is requested from browser by `XmlHttpRequest` object
* with http header: `X-Requested-With: AnyJavascriptFrameworkName`, `FALSE` otherwise.
* @return boolean
*/
public function IsAjax ();
/**
* Set boolean about AJAX request.
* `TRUE` if request is requested from browser by `XmlHttpRequest` object
* with http header: `X-Requested-With: AnyJavascriptFrameworkName`, `FALSE` otherwise.
* @param boolean $ajax
* @return \MvcCore\Controller
*/
public function SetIsAjax ($ajax);
/**
* Get user model instance. Template method.
* @return \MvcCore\Model
*/
public function GetUser ();
/**
* Set user model instance. Template method.
* @param \MvcCore\Model $user
* @return \MvcCore\Controller
*/
public function SetUser ($user);
/**
* Return current controller view object if any.
* Before `\MvcCore\Controller::PreDispatch();` is called
* in controller lifecycle, this property will be still `NULL`.
* @return \MvcCore\View|NULL
*/
public function GetView ();
/**
* Set current controller view object.
* @param \MvcCore\View $view
* @return \MvcCore\Controller
*/
public function SetView (\MvcCore\IView $view);
/**
* Get rendering mode switch to render views in two ways:
* `\MvcCore\IView::RENDER_WITH_OB_FROM_ACTION_TO_LAYOUT`:
* - Render action view first into output buffer, then render layout view
* wrapped around rendered action view string also into output buffer.
* Then set up rendered content from output buffer into response object
* and then send HTTP headers and content after all.
* `\MvcCore\IView::RENDER_WITHOUT_OB_CONTINUOUSLY`:
* - Special rendering mode to continuously sent larger data to client.
* Render layout view and render action view together inside it without
* output buffering. There is not used reponse object body property for
* this rendering mode. Http headers are sent before view rendering.
* @return int
*/
public function GetRenderMode ();
/**
* Set rendering mode switch to render views in two ways:
* `\MvcCore\IView::RENDER_WITH_OB_FROM_ACTION_TO_LAYOUT`:
* - Render action view first into output buffer, then render layout view
* wrapped around rendered action view string also into output buffer.
* Then set up rendered content from output buffer into response object
* and then send HTTP headers and content after all.
* `\MvcCore\IView::RENDER_WITHOUT_OB_CONTINUOUSLY`:
* - Special rendering mode to continuously sent larger data to client.
* Render layout view and render action view together inside it without
* output buffering. There is not used reponse object body property for
* this rendering mode. Http headers are sent before view rendering.
* @param int $renderMode
* @return \MvcCore\Controller
*/
public function SetRenderMode ($renderMode = \MvcCore\IView::RENDER_WITH_OB_FROM_ACTION_TO_LAYOUT);
/**
* Get layout name to render html wrapper around rendered action view.
* Example: `"front" | "admin" | "account"...`.
* @return string
*/
public function GetLayout ();
/**
* Set layout name to render html wrapper around rendered action view.
* Example: `"front" | "admin" | "account"...`.
* @param string $layout
* @return \MvcCore\Controller
*/
public function SetLayout ($layout = '');
/**
* Get customized sub-controllers template path value. `NULL` by default.
* You need to set into this property any custom string as relative path to
* your template file placed somewhere in `/App/Views/Scripts/`.
* For example if you want to render template file placed in:
* `/App/Views/Scripts/something/completely/custom.phtml`, you need to set
* up this property to value `something/completely` and then there is
* necessary to render your template only by calling controller rendering by:
* `$subcontrollerInstance->Render('custom');`
* @return string|NULL
*/
public function GetViewScriptsPath ();
/**
* Get customized sub-controllers template path value. `NULL` by default.
* You need to set into this property any custom string as relative path to
* your template file placed somewhere in `/App/Views/Scripts/`.
* For example if you want to render template file placed in:
* `/App/Views/Scripts/something/completely/custom.phtml`, you need to set
* up this property to value `something/completely` and then there is
* necessary to render your template only by calling controller rendering by:
* `$subcontrollerInstance->Render('custom');`
* @param string|NULL $viewScriptsPath
* @return \MvcCore\Controller
*/
public function SetViewScriptsPath ($viewScriptsPath = NULL);
/**
* Get `TRUE` if view is automatically created in base controller `PreDispatch()`
* method and if view is automatically rendered with wrapping layout view
* around after controller action is called. Or get `FALSE` if no view
* automatically rendered. Default value is `TRUE` for all non-ajax requests.
* @return bool
*/
public function GetViewEnabled ();
/**
* Set `TRUE` if view object will be automatically created in base controller
* `PreDispatch()` method and if view will be automatically rendered with wrapping
* layout view around after controller action is called. Or set `FALSE`
* otherwise to not render any view. Default value is `TRUE` for all non-ajax requests.
* @return \MvcCore\Controller
*/
public function SetViewEnabled ($viewEnabled = TRUE);
/**
* - Register child controller to process dispatching on it later.
* - This method is always called INTERNALLY, but you can use it for custom purposes.
* - This method automatically assigns into child controller(s) properties from parent:
* - `\MvcCore\Controller::$_parentController`
* - `\MvcCore\Controller::$request`
* - `\MvcCore\Controller::$response`
* - `\MvcCore\Controller::$router`
* - `\MvcCore\Controller::$layout`
* - `\MvcCore\Controller::$viewEnabled`
* - `\MvcCore\Controller::$user`
* @param \MvcCore\Controller $controller
* @param string|int $index
* @return \MvcCore\Controller
*/
public function AddChildController (\MvcCore\IController $controller, $index = NULL);
/**
* Get parent controller instance if any.
* Method for child controllers. This method returns
* `NULL` for top most parent controller instance.
* @return \MvcCore\Controller|NULL
*/
public function GetParentController ();
/**
* Set parent controller instance
* or `NULL` for "top most parent" controller.
* Method for child controllers.
* @param \MvcCore\Controller|NULL $parentController
* @return \MvcCore\Controller
*/
public function SetParentController (\MvcCore\IController $parentController = NULL);
/**
* Get all child controllers array, indexed by
* sub-controller property string name or by
* custom string name or by custom numeric index.
* @return \MvcCore\Controller[]
*/
public function GetChildControllers ();
/**
* Set all child controllers array, indexed by
* sub-controller property string name or by
* custom string name or by custom numeric index.
* This method is dangerous, because it replace all
* previous child controllers with given child controllers.
* If you want only to add child controller, use method:
* \MvcCore\Controller::AddChildController();` instead.
* @param \MvcCore\Controller[] $childControllers
* @return \MvcCore\Controller
*/
public function SetChildControllers (array $childControllers = []);
/**
* Get child controller at specific index.
* Sub-controller index should be string by parent controller
* property name or custom string name or numeric index.
* @param string|int $index
* @return \MvcCore\Controller
*/
public function GetChildController ($index = NULL);
/**
* Get (optionally cached) config INI file as `stdClass` or `array`,
* placed relatively from application document root.
* @param string $appRootRelativePath Any config relative path like `'/%appPath%/website.ini'`.
* @return \MvcCore\Config|NULL
*/
public function GetConfig ($appRootRelativePath);
/**
* Get (optionally cached) system config INI file as `stdClass` or `array`,
* placed by default in: `"/App/config.ini"`.
* @return \MvcCore\Config|NULL
*/
public function GetSystemConfig ();
/**
* Return small assets content with proper headers
* in single file application mode and immediately exit.
* @throws \Exception If file path is not allowed (500) or file not found (404).
* @return void
*/
public function AssetAction ();
/**
* Rendering process alias for `\MvcCore\Controller::Render();`.
* @return string
*/
public function __toString ();
/**
* - This method is called INTERNALLY in lifecycle dispatching process,
* but you can use it sooner or in any different time for custom render purposes.
* - Render prepared controller/action view in path by default:
* `"/App/Views/Scripts/<ctrl-dashed-name>/<action-dashed-name>.phtml"`.
* - If controller has no other parent controller, render layout view around action view.
* - For top most parent controller - store rendered action and layout view in response object and return empty string.
* - For child controller - return rendered action view as string.
* @param string $controllerOrActionNameDashed
* @param string $actionNameDashed
* @return string
*/
public function Render ($controllerOrActionNameDashed = NULL, $actionNameDashed = NULL);
/**
* Store rendered HTML output inside `\MvcCore\Controller::$response`
* to send into client browser later in `\MvcCore\Application::GetInstance()->Terminate();`.
* @param string $output
* @param bool $terminate
* @return void
*/
public function HtmlResponse ($output = "", $terminate = TRUE);
/**
* Store rendered XML output inside `\MvcCore\Controller::$response`
* to send into client browser later in `\MvcCore\Application::GetInstance()->Terminate();`.
* @param string $output
* @param bool $terminate
* @return void
*/
public function XmlResponse ($output = "", $terminate = TRUE);
/**
* Store rendered text output inside `\MvcCore\Controller::$response`
* to send into client browser later in `\MvcCore\Application::GetInstance()->Terminate();`.
* @param string $output
* @param bool $terminate
* @return void
*/
public function TextResponse ($output = '', $terminate = TRUE);
/**
* Serialize any PHP value into `JSON string` and store
* it inside `\MvcCore\Controller::$response` to send it
* into client browser later in `\MvcCore\Application::GetInstance()->Terminate();`.
* @param mixed $data
* @param bool $terminate
* @throws \Exception JSON encoding error.
* @return void
*/
public function JsonResponse ($data = NULL, $terminate = TRUE);
/**
* Serialize any PHP value into `JSON string`, wrap around prepared public
* javascript function in target window sent as `$_GET` param under
* variable `$callbackParamName` (allowed chars: `a-zA-Z0-9\.\-_\$`) and
* store it inside `\MvcCore\Controller::$response` to send it
* into client browser later in `\MvcCore\Application::GetInstance()->Terminate();`.
* @param mixed $data
* @param string $callbackParamName
* @param bool $terminate
* @throws \Exception JSON encoding error.
* @return void
*/
public function JsonpResponse ($data = NULL, $callbackParamName = 'callback', $terminate = TRUE);
/**
* Generates url:
* - By `"Controller:Action"` name and params array
* (for routes configuration when routes array has keys with `"Controller:Action"` strings
* and routes has not controller name and action name defined inside).
* - By route name and params array
* (route name is key in routes configuration array, should be any string
* but routes must have information about controller name and action name inside).
* Result address (url string) should have two forms:
* - Nice rewritten URL by routes configuration
* (for apps with URL rewrite support (Apache `.htaccess` or IIS URL rewrite module)
* and when first param is key in routes configuration array).
* - For all other cases is URL form like: `"index.php?controller=ctrlName&action=actionName"`
* (when first param is not founded in routes configuration array).
* @param string $controllerActionOrRouteName Should be `"Controller:Action"` combination or just any route name as custom specific string.
* @param array $params Optional, array with params, key is param name, value is param value.
* @return string
*/
public function Url ($controllerActionOrRouteName = 'Index:Index', array $params = []);
/**
* Return asset path or single file mode URL for small assets
* handled by internal controller action `"Controller:Asset"`.
* @param string $path
* @return string
*/
public function AssetUrl ($path = '');
/**
* Alias for `\MvcCore\Session::GetNamespace($name);`
* but called with configured session core class name.
* @param mixed $name
* @return \MvcCore\Session
*/
public function GetSessionNamespace ($name = \MvcCore\ISession::DEFAULT_NAMESPACE_NAME);
/**
* Render error controller and error action
* for any dispatch exception or error as
* rendered html response or as plain text response.
* @param string $exceptionMessage
* @return void
*/
public function RenderError ($exceptionMessage = '');
/**
* Render not found controller and not found action
* for any dispatch exception with code 404 as
* rendered html response or as plain text response.
* @return void
*/
public function RenderNotFound ();
/**
* Complete view script path by given controller and action or only by given action rendering arguments.
* @param string $controllerOrActionNameDashed
* @param string $actionNameDashed
* @return string
*/
public function GetViewScriptPath ($controllerOrActionNameDashed = NULL, $actionNameDashed = NULL);
/**
* Terminate request.
* - Send headers if possible.
* - Echo response body.
* - Write session.
* This method is always called INTERNALLY after controller
* lifecycle has been dispatched. But you can use it any
* time sooner for custom purposes.
* This method is only shortcut for: `\MvcCore\Application::GetInstance()->Terminate();`.
* @return void
*/
public function Terminate ();
}