intController() and __construct() |
07-30-2018, 01:26 PM
(This post was last modified: 07-30-2018, 08:17 PM by enlivenapp. Edit Reason: Spelling and make the first line easier to figure out what I'm asking about )
I'd like to make sure I have my head wrapped around the removal no longer need of __contruct() from controllers to construct the parent.
I I've got that PHP Code: public function __construct() specifically is no longer needed as intController() takes care of all that. So, where I'm a bit fuzzy is this: When I need/want to initialize a controller wide access to a resource, IE: (shortened for brevity), The "old way" PHP Code: <?php namespace App\Controllers; Is this still valid to set up a controller-wide available resource? or should we be using these in each method when we need them and not use __construct() at all? IE: PHP Code: <?php namespace App\Controllers; I realize using database and builder is open to 'the fat/skinny controller/model argument', this is just an example to ask my question...
You're overthinking it
![]() Yes - it's perfectly valid to do controller-wide resources. Just forget the initController() exists and you'll be fine. That's used by the framework, not by you. It just makes it a little simpler/cleaner when you want to create controller-wide resources. Instead of: Code: public function__construct(...$params) You would do: Code: public function__construct()
I have just noticed that I cannot access the variables initiated in BaseController initController method in the constructors of my controllers...
I have $this->settingsModel = model('SettingsModel'); $this->settings = $this->settingsModel->keyValue(); in my BaseController initController method, and running $hl = explode('-', $this->settings['booking_hours']); in controller methods goes fine, but if I do this in function __construct() I get an error Undefined property: App\Controllers\Booking::$settings What would be the correct way to do things here? Maybe use initController with a parent call in my controller classes instead of __construct()? I could, of course, simply initiate the needed model and run the $this->settings = $this->settingsModel->keyValue(); in the constructor...
==
Donatas G.
@dgvirtual `initController()` is called after calling `__construct()`.
`__construct()` is PHP language method that is called (by PHP) when creating an instance. After instantiation of a controller, CI4 calls `initController()`. (05-22-2022, 02:43 AM)kenjis Wrote: @dgvirtual `initController()` is called after calling `__construct()`. Yep, I could deduce that. so, could I replace my constructors with an initController() method? do it like it is done in the BaseController init method: call the method and then call it's parent inside? PHP Code: parent::initController($request, $response, $logger);
==
Donatas G. |
Welcome Guest, Not a member yet? Register Sign In |