gpt4 book ai didi

php - Symfony 1.4 动态模板

转载 作者:行者123 更新时间:2023-11-29 14:33:37 25 4
gpt4 key购买 nike

我对 Symfony 很陌生,正在开发 1.4 版本的应用程序。我可以对我正在研究的某些逻辑使用一些输入,并希望这里有人能给我指出正确的方向。

目前,我正在开发一个简单的搜索模块(不是用于 jobeet 或使用 zend search 的模块),该模块使用用户输入的一些文本查询多个表。用户输入的文本可以在一个或多个中找到三个表:元素、任务、NPC。所有找到的结果将显示在搜索模块的搜索操作中。

我想要的是,结果在搜索操作中显示为正确模块(分别为项目、任务、Npc)的链接,但前提是找到该类型的结果。示例(如果找到任务和元素匹配,但未找到 NPC):

 Your search found 1 Item:
Item 1

Your search found 1 quest:
Quest 1

由于没有找到 NPC,所以甚至不需要告诉用户没有,因此被省略。这就是我遇到麻烦的地方。我不太确定如何去做这件事。我可以逃避并使用 searchSuccess.php 中的 if 语句,并且仅在数组的 count() 大于 1 时才显示这些语句,但这违背了 mvc 的目的,对吗?这是实现这一目标的唯一合乎逻辑的解决方案,还是有其他我没有看到的方法?

我非常感谢任何和所有反馈。

最佳答案

有很多方法可以做到这一点,最简单的可能是这样的:

// controller
public function executeSearch(sfWebRequest $request)
{
$this->results = array();
// well assume you are using sfForm and have validated the search query
// which is $searchTerm and that each of your tables has a search method

// well also assume youre using object routes for these models
$this->actionMap = array(
'Npc' => 'npc_show',
'Quest' => 'quest_show',
'Item' => 'item_show'
);

foreach(array_keys($this->actionMap) as $model)
{
$modelResults = Doctrine_Core::getTable($model)->search($searchTerm);
if($modelResults)
{
$this->results[$model] = $modelResults;
}
}

return sfView::SUCCESS;
}

因此,我们看到的 View 是 $results 一个多维数组,其中包含查询返回结果的模型的顶级元素。没有任何匹配结果的模型将被省略。 $actionMap 保存一个 ModelName => Routename 映射数组。

// in your searchSuccess

<?php if(count($results)): ?>
<?php foreach($results as $model => $modelResults): ?>
<?php printf("<h3>Your search found %s %s results:</h3>", $modelResults->count(), $model); ?>
<ul>
<?php foreach($modelResults as $result): ?>
<li><?php echo link_to($result, $actionMap[$model], $result); ?></li>
<?php endforeach; ?>
</ul>
<?php endforeach; ?>
<?php else: ?>
<h3>No results found.</h3>
<?php endif; ?>

关于php - Symfony 1.4 动态模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com