Вероятно, существует множество способов выполнить то, что вы пытаетесь.
"Самый простой" - это просто переопределить конструктор и создать экземпляр модели напрямую.
в User_Controller:
public function __construct(DependencyContainer $dc) {
parent::__construct($dc);
$this->model = new User_Model();
}
Полагаю, вы ищете что-то более автоматизированное.Если вы хотите, чтобы модель имела то же имя, что и контроллер, за исключением «_Controller», просто используйте get_class ($ this) в конструкторе и используйте строковые функции PHP для анализа того, что вы хотите.Если у вас есть это в переменной, вы можете использовать эту переменную для создания экземпляра модели:
в Core_Controller:
public function __construct(DependencyContainer $dc) {
$this->view = new Core_View();
// $model_class should be 'User_Model' now
$model_class = str_replace('_Controller', '_Model', get_class($this));
// now instantiate the model
$this->model = new $model_class();
}
На самом деле я не работал ни с одним фреймворком, который может иметь только одинМодель связана с каждым контроллером (кроме CakePHP? Не помню).С Symfony модели и контроллеры полностью отделены, поэтому вы можете использовать любую модель с любым контроллером.Вы просто создаете модель по мере необходимости.Symfony использует Doctrine ORM, поэтому, например, в действии контроллера, если вам нужна модель, вы должны сделать что-то вроде этого:
$model = Doctrine::getTable('User');
Возможно, стоит подумать о дизайне, более похожем на этот, для продвиженияотделенный дизайн, и я обещаю , что в какой-то момент вам понадобится более одной модели в каком-либо контроллере.
2.) Что касается аутентификации.Что-то, что кажется довольно распространенным, - это иметь какие-то настройки (в конфигурационном файле или в переменной-члене), которые говорят, требует ли текущее действие аутентификации пользователя.Это обрабатывается каждый раз, когда выполняется действие (Yii вызывает фильтры такого рода).Если пользователю необходимо войти в систему, он сохраняет страницу, к которой он пытается получить доступ, а затем перенаправляет его на страницу входа (вам нужно только создать ее).Как только они должным образом аутентифицируются, он перенаправит их туда, куда они первоначально направлялись.