通常我使用Zend Framework,这是我在Lithium中遗漏的东西。谐音。在视图中有一个渲染方法,你可以使用我最接近的'elements'。
<?php $this->_render('element', 'form); ?>
这确实有效,但它要求form.html.php文件位于/ views / elements文件夹中。是否可以让它在另一条路径中搜索?喜欢/ views / users /所以它获取文件/views/users/form.html.php。
我尝试了以下内容,因为我发现render method确实接受了一个选项参数,您可以在其中指定路径。所以我帮助我解决了这个问题。
namespace app\extensions\helper;
use lithium\template\TemplateException;
class Partial extends \lithium\template\Helper
{
public function render($name, $folder = 'elements', $data = array())
{
$path = LITHIUM_APP_PATH . '/views/' . $folder;
$options['paths']['element'] = '{:library}/views/' . $folder . '/{:template}.{:type}.php';
return $this->_context->view()->render(
array('element' => $name),
$data,
$options
);
}
}
但是它仍然只在/ view / elements文件夹中搜索,而不是在我指定的路径中搜索。
我做错了吗?
答案 0 :(得分:11)
为什么在使用Lithium时可以使用插件: - )
我不知道Zend,但这里有一个例子来配置元素默认路径,从相关的视图文件夹而不是共享路径加载它们。
让我们再添加一件事:我们希望通过在文件名后附加非下划线来区分普通视图中的元素/部分(模仿Rails部分)
首先,在引导过程中重新配置媒体(config / bootstrap / media.php)
Media::type('default', null, array(
'view' => 'lithium\template\View',
'paths' => array(
'layout' => '{:library}/views/layouts/{:layout}.{:type}.php',
'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
'element' => array(
'{:library}/views/{:controller}/_{:template}.{:type}.php',
'{:library}/views/elements/{:template}.{:type}.php'
)
)
));
然后,使用它
假设一个控制器Documents
。呼吁观点:
<?= $this->_render('element', 'foo', $data, array('controller' => 'documents')); ?>
这将在views/documents/_foo.html.php
内查找文件,如果不存在,则回退到/views/elements/foo.html.php
这种简单的框架默认重新配置,可以在Lithium中完成一堆东西(创建命名空间的默认控制器路径,视图路径,库等......)
重新映射模板路径的另一个示例是,您可以使用pages/users_{username}.php
之类的内容而不是Lithium默认值:
https://gist.github.com/1854561
答案 1 :(得分:2)
修正了它。奇迹般有效。 Zend就像Lithium中的Partials。
<?php
namespace app\extensions\helper;
use lithium\template\View;
class Partial extends \lithium\template\Helper
{
public function render($name, $folder = 'elements', array $data = array())
{
$view = new View(array(
'paths' => array(
'template' => '{:library}/views/' . $folder . '/' . $name . '.{:type}.php'
)
));
return $view->render('all', $data);
}
}
可以在以下模板中使用:
<?php echo $this->partial->render('filename', 'foldername', compact('foo', 'bar')); ?>
答案 2 :(得分:1)