【问题标题】:How to call a function of a controller from a view?如何从视图调用控制器的功能?
【发布时间】:2015-07-22 06:52:55
【问题描述】:

有一个控制器:

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 我想调用控制器ReferentielClientController 的indexAction 方法。该怎么做?

【问题讨论】:

  • “从某种意义上说,我想调用控制器的indexAction方法。”不,你没有。视图应该呈现数据。控制器的工作是获取要呈现的数据。您应该不在视图中调用控制器操作(或模型方法)。
  • 伙计...不要那样做。不要与 MVC 相矛盾

标签: php phalcon


【解决方案1】:

简短回答:你不能。

你不能,因为 indexAction 不是一个普通的方法,它是一个动作。任何人都不会像通常的方法那样调用操作,它们是通过路由和 url 调用的。让我进一步解释一下:

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

a 就是我们所说的模块。 b 就是我们所说的控制器。 而c就是我们所说的action。

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

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

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

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

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

总结: 您不需要从视图中调用任何控制器函数,只需从控制器中提供该信息即可。

添加了有关重定向的信息

好的,回答您的评论。您想要的不是调用该函数,而是将浏览器重定向到该操作。

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

我猜您将无法在按钮等上使用 href 进行正常重定向,因此您需要使用 redirector 帮助器。由于您不在控制器中,因此您无法通过以下方式使用帮助器:

$this->_helper->redirector->gotoUrl($url);

所以你需要像这样实例化 redirector:

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

作为 $url,您的路由器给出的 URL,您可以在上面的链接中阅读。

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

我希望这会有所帮助!

【讨论】:

  • 但我想要一个按钮来将应用程序重定向到该操作;该怎么做?
  • 我编辑我的答案添加有关重定向的新信息:)。
  • 我不使用 Zend !我使用 Phalcon。
  • 嗯,对不起,我看错了。您也应该能够从控制器重定向:Docs 我真的不认为从视图重定向是一个好主意。
【解决方案2】:

好的,我找到了:我将href 设置为指向控制器:&lt;a href="/resto/ReferentielClient" class="button default"&gt;Annuler&lt;/a&gt;

【讨论】:

    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多