我正在为我的应用程序使用phalcon php框架。 这个应用程序经常使用javascript verry进行交互式。
是否有类/服务也会根据名称包含js控制器,否则如果找不到包含'main'javascript文件?
例如我正在请求网址: http://www.mysite.com/search/keyword
因此phalcon将使用包含参数的indexAction执行searchController。 indexAction函数返回的数据将传递给视图。
该视图还将包含js / search / index.js
(可能还包括css文件css / search / index.css!?)
js是否有这种类型的层次结构功能的功能?
答案 0 :(得分:1)
开箱即用,但这相对容易实现。您可以在基本控制器中实现该逻辑,具体如下:
abstract class AbstractController extends \Phalcon\Mvc\Controller
{
public function afterExecuteRoute()
{
// Don't want to add assets if the action gets forwarded.
if (!$this->dispatcher->isFinished()) {
return;
}
$controllerName = $this->dispatcher->getControllerName();
$actionName = $this->dispatcher->getActionName();
$path = 'js/' . $controllerName. '/' . $actionName . '.js';
// Defining APPLICATION_PATH global constant is one way of pointing to the root of your application.
// This can be done in your config or index. Alternatively you could add config to your DI and do
// something like DI::getDefault()->getShared('config')->applicationPath.
if (file_exists(APPLICATION_PATH . '/public/' . $path)) {
$this->assets->addJs($path);
} else {
$this->assets->addJs('js/main.js');
}
}
}
在视图中output them as usual:
<html>
<head>
<title>Some amazing website</title>
<?php $this->assets->outputCss() ?>
</head>
<body>
<!-- ... -->
<?php $this->assets->outputJs() ?>
</body>
<html>
看看controller events,它们在这样的时候非常方便。
<强>更新强>
另一种可能的方法是使用视图选择逻辑来紧密选择js。该视图将检查views/controller/action.volt
,views/layouts/controller.volt
等,详细了解hierarchical rendering。这将通过将js层次结构与实际视图层次结构相匹配来帮助保持整洁。这取决于你如何实现它,但最好将它们保存在同一个afterExecuteRoute
处理程序中。