Bad practice may have been an exaggeration.
Of course you can use
__construct() unless you don't useĀ the request object or something that
initController() initializes.
True bad practice is try to use uninitialized things. You don't need to do that.
If you want to do something with the request object, you can use Controller Filters.