如何从视图中调用控制器的功能?

时间:2015-07-22 06:52:56

标签: php phalcon

有一个控制器:

use Phalcon\Mvc\Controller;
class ReferentielClientController extends Controller
{

    public function indexAction(){
        // moteur de template pour une View
        $this->view->act_form = 'ReferentielClient/ajouterClient';
        return $this->view->pick("client/listerClient");
    }

    public function ajouterClientAction(){
        $this->view->action_form = 'ajouterClientExec';
        return $this->view->pick("client/ajouterClient");
    }
    ...
}

view我想调用控制器indexAction的{​​{1}}方法。怎么做?

2 个答案:

答案 0 :(得分:4)

简短的回答:你不能。

你不能,因为indexAction不是一个普通的方法,它是一个动作。任何人都不会以通常的方式调用操作,它们通过路径调用url。让我再解释一下:

使用MVC,我们使用以下路线: http://www.example.org/a/b/c

a我们称之为模块。 b是我们称之为控制器的。 而c就是我们所说的行动。

索引操作和默认模块不会出现在URL中。

那么,如何从视图中调用函数?最好不要。最好的方法是在控制器中执行所有操作并将该信息传递给视图。即:

public function indexAction(){
    $this->view->myInfo = $allMyInformationInOneObject;
}

然后,在视图(index.phtml)中:

<p>
    <?php echo $this->myInfo ?>
</p>

要点: 您无需从视图中调用任何控制器功能,只需从控制器中提供该信息即可。

添加了有关重定向的信息

好的,回答你的评论。你想要的不是调用该功能,而是将浏览器重定向到该动作。

所以,我想你已经在你的路由器中创建了你的路由,如果没有,请转到Zend documentation about routing。强烈建议创建路由而不是使用URL本身。

我猜您无法在按钮等上使用 href 进行正常重定向,因此您需要使用重定向器帮助程序。由于您不在控制器中,因此无法使用:

来使用帮助程序
$this->_helper->redirector->gotoUrl($url);

所以你需要像这样实例化重定向器

$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$redirector->gotoUrl($url);

这个$ url是路由器提供的URL,您可以在上面的链接中阅读。

可以这样做但我强烈建议不要从视图重定向,而是从控制器重定向。所有逻辑都保留在控制器中会很好。

我希望这有帮助!

答案 1 :(得分:1)

好的我找到了:我将href设置为指向控制器:<a href="/resto/ReferentielClient" class="button default">Annuler</a>