2016-09-01 2 views
-1

Я хочу сделать некоторые действия перед выполнением метода контроллера. Но я не могу, потому что метод initialize() не работает в микроприложении. Я могу проверить путь в Базовом контроллере и сделать некоторые действия, но я думаю, что это неверно.Метод Initialize() не работает в микроприложении в Phalcon

+0

Пожалуйста, покажите нам, как вы пытаетесь использовать метод initialize? Другими словами: дайте нам код! – Luke

ответ

0

Да, потому что контроллеры в микро - это только обработчики. Возможно, __construct?

+0

как его использовать? когда я пытаюсь использовать его, он дает мне ошибку: нельзя переопределить конечный метод Phalcon \ Mvc \ Controller :: __ construct() –

+0

Конечно, вы не можете, поскольку конструктор объявляется окончательным. Наилучший подход - использовать событие 'before' в методе $ app-> before(). – stamster

+0

Затем используйте, прежде чем я угадываю или использую onConstruct в контроллере (этот должен работать). – Juri

1

Вы не можете перезаписать __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().

+0

Я расширяю контроллер, а не \ Phalcon \ DI \ Injectable. И я нахожу решение - я использую onConstruct в BaseController и parent :: onConstruct в контроллере, который расширяет BaseController, но спасибо. –

+0

@ АлександрКовальчук, да, вы обязательно должны использовать 'onConstruct'. Я думаю, что мой взгляд привлек его ответ, поэтому я подумал, что вы пытаетесь использовать '__onConstruct()'. Виноват :) – Timothy

 Смежные вопросы

  • Нет связанных вопросов^_^