Для CodeIgniter одним из способов абстрагирования логики является создание суперкласса как такового:
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
//...do stuff...
}
//...do stuff...
}
/* End of file MY_Controller.php */
/* Location: ./application/core/MY_Controller.php */
Все ваши контроллеры, для которых вы хотите использовать одну и ту же логику, должны затем расширить MY_Controller вместо CI_Controller
Теперь в вашем MY_Controller вы можете создавать функции для «обработки неверных параметров в нескольких методах».
UPDATE
Параметры вашего контроллера поступают с вашего маршрута. например mydomain.com/mycontroller/myfunction/param1/param2/
будет идти к mycontroller
public function myfunction($param1, $param2)
$site_id
- это просто имя переменной. Вы не можете сказать, как он назван, и даже если бы вы могли, я сомневаюсь, что это хорошая идея - основывать любую логику на том, как вы называете свои переменные.
Простой способ - просто явно вызвать функцию проверки (хранимую один раз в вашем базовом контроллере, библиотеке или помощнике) в каждой функции контроллера, которая требует этого, что дает вам точный контроль зерна.
UPDATE
Extending the controller would only work if my parameters were the same for each method. I'd like to detect automatically the parameters and perform checks. I suppose a call to a helper might be the best I can do, but Id just like to be able to completely abstract it away from the method. I suppose one option would be to have an array of which controllers and methods have $site_id as their first parameter and have a pre_controller hook to do the checking. But this would mean keeping the array up-to-date which kind of defeats the object of my question which is to make things as DRY as possible!
Как правило, чтобы получить автоматизацию, вы должны гибко сдаться и следовать соглашениям.
чтобы не идти по пути «использовать помощника» и идти по пути автоматического обнаружения ... создайте свое собственное соглашение.
в вашем базовом контроллере используйте $ this-> uri-> сегмента (n), чтобы проверить, существует ли определенный шаблон URL, если вы знаете, что параметр site_id поступает и вы можете запустить автоматическую проверку на нем.