Я хочу сделать некоторые действия перед выполнением метода контроллера. Но я не могу, потому что метод initialize() не работает в микроприложении. Я могу проверить путь в Базовом контроллере и сделать некоторые действия, но я думаю, что это неверно.Метод Initialize() не работает в микроприложении в Phalcon
ответ
Да, потому что контроллеры в микро - это только обработчики. Возможно, __construct
?
как его использовать? когда я пытаюсь использовать его, он дает мне ошибку: нельзя переопределить конечный метод Phalcon \ Mvc \ Controller :: __ construct() –
Конечно, вы не можете, поскольку конструктор объявляется окончательным. Наилучший подход - использовать событие 'before' в методе $ app-> before(). – stamster
Затем используйте, прежде чем я угадываю или использую onConstruct в контроллере (этот должен работать). – Juri
Вы не можете перезаписать __construct()
метод Phalcon\Mvc\Controller
, поскольку __construct()
определяется как final
и для этого не может быть изменен.
Обходной, чтобы ваш baseController
продлить, как это (вместо Phalcon\Mvc\Controller
):
class BaseController extends \Phalcon\DI\Injectable {
public function __construct() {
// ...
}
}
class YourController extends BaseController {
// do stuff
}
Или вместо вышеперечисленных махинаций, вы можете использовать метод сборки в onConstruct
class BaseController extends Phalcon\Mvc\Controller {
public function onConstruct() {
// ...
}
}
Обратите внимание, что метод onConstruct()
запускается при создании контроллера. Это отличается от поведения метода initialize()
, который вызывает послеbeforeExecuteRoute()
.
Я расширяю контроллер, а не \ Phalcon \ DI \ Injectable. И я нахожу решение - я использую onConstruct в BaseController и parent :: onConstruct в контроллере, который расширяет BaseController, но спасибо. –
@ АлександрКовальчук, да, вы обязательно должны использовать 'onConstruct'. Я думаю, что мой взгляд привлек его ответ, поэтому я подумал, что вы пытаетесь использовать '__onConstruct()'. Виноват :) – Timothy
Пожалуйста, покажите нам, как вы пытаетесь использовать метод initialize? Другими словами: дайте нам код! – Luke