A Controller is a PHP file that takes the HTTP request and manages the execution path of the application (instance of the application) at the server-side. An application can have more than one controller file when required. A Controller file can define public URLs or private URLs (i.e., password-protected URLs) or even mixed URLs (where user session is optional) as the situations demand. However, a Controller file cannot have both public and private URLs, and you need separate Controller files for this.

A Controller file is defined and edited by the Opendelight IDE and requires the developer to specify the controller file name. The Controller file name can be prepended by the path from the root of the application folder if it is located inside an inner directory, but never include any slash in the beginning. For example

• The controller name is mycontroller.php if it is located in the application root directory.
• The controller name is test/mycontroller.php if it is located inside the directory test located in the application root directory.

NOTE: We have decided to use the name mycontroller.php in the above example, but you can name anything. Please note further that you can also choose other file extensions for your controller file if you are ready to implement that as a PHP script through your apache configuration or .htaccess)

Please note that you already get one controller when you install the Opendelight - index.php. It is the default controller of the application as anybody will access this file when they go to it. In the case of a public website, this controller can be made public. In the case of a web application, this controller can be made private, and sign.php be made its Sign In controller.

#### What Does A Controller Do in the Opendelight?

• Declares special PHP environment setting, if any (these are particularly php.ini directive(s))
• Starts Session with the line session_start();
• Defines $_CTRID. This will be the ctrid field value at <table_prefix>_od_controller table for the corresponding controller file. • Includes the file load.delight.php. This act will instantiate three Delight objects:$DB, $APP and$USER (if it is a private controller)
• Calls BL based on application instance ($APP->ID), and loads data for like$APP->VIEWPARTS, $APP->$FORMRULES and $APP->$PAGEVARS
• Finally, calls viewparts as defined for the application instance (in \$APP->VIEWPARTS). If no view part is defined for a particular instance, data arrays as obtained from BL calls, are sent back to UI by the Controller (usual in the case of AJAX calls from UI).