Legacy Controllers

Legacy controllers are based on PrestaShop’s custom framework and go a long way back. All front controllers and all Admin controllers that haven’t been migrated to Symfony yet are based on this.

Execution flow

Legacy controllers work best when a Controller performs a single action, for example, render a page. The process has been divided in several methods, which simplifies customization via method override.

%%{ init: { 'flowchart': { 'curve': 'stepAfter' } } }%% graph TB A(("Controller::run()")) --> B("init()
Initializes the controller") B:::importantStep --> C{"checkAccess()
Check if the controller
is available for the
current user/visitor
"} C:::decision -- false --> D("initCursedPage()
Assigns Smarty variables when access is forbidden") D --> E("smartyOutputContent()
Displays the page content") E:::importantStep C -- true --> G("setMedia()
Sets controller's CSS and JS files") G:::notAlwaysRun --> H("postProcess()
Used to process user input") H:::importantStep --> I{"has redirect_after"} I:::decision -- true --> J("redirect()
If there is no error, redirects after the process to the #quot;redirect_after#quot;") I -- false --> K("initHeader()
Assigns Smarty variables
for the page header
") J --> K K:::notAlwaysRun --> L{"viewAccess()
Checks if the current user/visitor
has valid view permissions
"} L:::decision -- false --> M("Add access denied error message
Added to errors property") L -- true --> N("initContent()
Assigns Smarty variables
for the main content of the page
") M --> O("initFooter()
Assigns Smarty variables for the page footer") N:::importantStep --> O O:::notAlwaysRun --> P{"is ajax"} P:::decision -- false --> Q("display()
Displays page content") P -- true --> R("displayAjax{action}()
Displays page content
for ajax requests
") Q:::importantStep R:::importantStep subgraph Legend direction LR S:::notAlwaysRun S("Not always Run") T:::importantStep T("Important step") end classDef notAlwaysRun fill:#fff0c4; classDef importantStep fill:#c7e6ce; classDef decision fill:#e2d0e5; classDef default fill:#FFFFFF; style Legend fill:#FFFFFF,stroke:#CCCCCC,stroke-width:1px;