标题可能令人困惑,但这是对代码的解释。
根据某些条件,
即使用户已拨打actionContact
,我也可以致电actionIndex
。
解决方案:1
public function actionIndex()
{
$a = 5;
if($a == 5){
$this->actionContact();
}
else{
$this->render('index');
}
}
public function actionContact()
{
// Some codes
$this->render('contact');
}
解决方案:2
public function actionIndex()
{
$a = 5;
if($a == 5){
// Repeat code from actionContact method
$this->render('contact');
}
else{
$this->render('index');
}
}
解决方案:3 我可以重定向到联系人网址。
我认为,解决方案1对我来说很好,我宁愿这样做。 但是,既然我是yii的新手,我想知道,如果要走的路?
答案 0 :(得分:9)
如果没问题,可以使用转发
http://www.yiiframework.com/doc/api/1.1/CController#forward-detail
public function actionIndex()
{
$a = 5;
if($a == 5){
// Forward user to action "contact"
$this->forward('contact');
}
else{
$this->render('index');
}
}
public function actionContact()
{
// Some codes
$this->render('contact');
}
答案 1 :(得分:3)
“重复代码”很少是正确的答案。重定向涉及额外的开销,在我看来,它们应该主要用于响应POST操作,而不是像这样。在这种情况下,我会选择解决方案1.
答案 2 :(得分:3)
您可以使用第四个选项,即将索引和联系操作常用的部分重构为第三个方法:
public function common() {
// ...
}
public function actionIndex() {
// ... call $this->common()
}
public function actionContact() {
// ... call $this->common()
}
但最好的选择取决于您的具体情况。例如,当您决定必须调用其他操作时,是否也要渲染其视图?