路由器
new Router(false);
视图
module/views/index/index.volt
路线
$router->add("/", array(
'module' => 'module',
'controller' => 'index',
'action' => 'index',
));
您如何调用名为" otherAction"使用按钮或锚点在index.volt中设置索引控制器而不添加新路由?
<?php
namespace Multiple\Module\Controllers;
class IndexController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
}
public function otherAction()
{
}
}
简而言之,我喜欢直接从视图本身发送。
答案 0 :(得分:1)
我认为你的评论员是正确的,你不能在phalcon视图中这样做。我已经看到Laravel刀片扩展使用语法{{controller @ method}}完全符合您的要求,但我不知道phalcon有任何这样的事情。
我能建议的最好是:
<?php
namespace Multiple\Module\Controllers;
class IndexController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
$other_data = $this->otherAction();
// ... extract the required data from $other_data
// ... pass the required data to the view
}
public function otherAction()
{
}
}
我原本建议你不要从视图中调用该函数,但是可以通过将控制器作为视图变量传递给视图。我不相信这是最好的主意但是你会怎么做:
public function indexAction()
{
$this->view->controller = $this;
}
在视图中,您可以执行以下操作:
<?php $result = $controller->otherAction(); ?>
...然后你需要解释值$ result并相应地采取行动(取决于你如何编码otherAction()以及它返回的内容)。
我再一次认为这不是一个好主意。编写PHP内部模板会稍微破坏视图/控制器的分离,收集控制器中的所有变量并将其传递给视图,而不是期望将视图调用回控制器以获取内容,这将是更好的代码。
答案 1 :(得分:1)
如果您想隐藏某些操作并根据查询收集/发送的参数触发它们,则不一定是false
路由器。
在我的一个控制器中,我有一个像这样的生产工作解决方案:
<强>初始化强>
public function initialize()
{
// if someone tries to get to subaction of controller, prevent it.
if ($this->dispatcher->getActionName() != 'index') {
$this->dispatcher->setActionName('index');
}
// exploding request path - should you implement Path class.
if ($path = Path::get()) {
$this->hash = $path[1]; // or 2 or whatever you need
} else {
$this->dispatcher->forward(['controller' => 'notfound404']);
}
}
这样整个控制器我都有一个hash
属性,有一个参数我可以case
结束。
示例indexAction
public function indexAction()
{
if (!$this->request->isPost()) {
// not a POST request, using mainAction to generate view.
$this->dispatcher->forward(['action' => 'main']);
} else {
switch ($this->hash) {
case 'stepOne':
case 'stepTwo':
case 'summary':
$this->dispatcher->forward(['action' => $this->hash]);
break;
default:
$this->dispatcher->forward(['action' => 'error']);
break;
}
}
}
无论如何,可能无法使用路由器。
答案 2 :(得分:0)
你的问题不够详细。
你试过了吗? <a href="index/other">Click to call otherAction</a>
?