Лучший способ перенаправить при входе в систему

Я хочу создать индексную страницу example.com, которая показывает форму входа, когда пользователь впервые заходит на сайт. Затем после входа в систему example.com покажет главную страницу своего контента. Как лучше всего добиться этого в Zend Framework?

Будет ли это?

//example.com
//if auth is false, show a login form

//else...
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()) $loggedIn = true;

//show "Hello World"

В общем, как «если вы вошли в систему, повторите« Hello World », иначе покажите форму входа». Я пытаюсь ограничить количество операторов if, else и задавался вопросом, был ли это единственный выход.


person michael liu    schedule 11.12.2012    source источник


Ответы (1)


Возможно, попробуйте отобразить разные представления: http://framework.zend.com/manual/1.11/en/zend.controller.action.html#zend.controller.action.viewintegration.render

Сам не пробовал, но:

$auth = Zend_Auth::getInstance();
if (!$auth->hasIdentity()) {
    //login.phtml
    $this->render('login');
} else {
    //content.phtml
    $this->render('content');
}

Не уверен, есть ли способ сделать это без if-else, действительно ли они такая большая проблема? Насколько я знаю, действия контроллера должны быть довольно простыми, поэтому не должно быть большого количества вложений вокруг этого кода или цикломатической сложности внутри функции действия?

person RhodriM    schedule 11.12.2012
comment
Извините, не думаю, что я ясно выразился в своем вопросе. Я не пытался перенаправить их на другую страницу. Я хочу, чтобы все были на example.com - когда пользователь, который еще не вошел в систему, он увидит форму входа. Если они вошли в систему, например, будет отображаться Hello World. Лучше всего просто пойти if (// имеет личность) {показать форму входа} else echo Привет, мир? - person michael liu; 11.12.2012
comment
Причина, по которой я не хочу использовать if else, заключается в том, что что, если у меня будет большой объем информации в контенте после того, как они вошли в систему? - person michael liu; 11.12.2012
comment
вместо рендеринга я бы использовал помощник перенаправителя. то же, что и выше, но замените $ this- ›render на $ this -› _ helper- ›redirector-› gotoUrl ('/ dashboard'); - person Jane Yun; 12.12.2012
comment
Джеймс: Я уже предлагал перенаправление, но Майкл хочет, чтобы логин / контент были на той же странице. майкл: наверняка большая часть этого (по крайней мере html) будет в представлении, если оно статично? Если это не так, тогда действие контроллера просто передаст его представлению из модели? Я бы лично не стал наполнять действие вашего контроллера бизнес-логикой или контентом. Если вам действительно нужно иметь его в контроллере, вы всегда можете поместить его в другую функцию. - person RhodriM; 12.12.2012
comment
бизнес-логика будет в представлении, поэтому идея рендеринга («содержимого») великолепна. Мне просто было интересно, было ли это лучшей практикой или как еще люди делают это без действительно длинного оператора if-else - person michael liu; 12.12.2012