从数据库中填充格式化内容页面的建议

时间:2015-10-31 23:18:00

标签: html laravel

我正在开展我的第一个laravel项目 - 家庭树网站。对于普通的模型/控制器/视图,一切都很顺利,但我已经遇到了一个我不确定如何处理的特殊情况。我有十几个辅助故事与特定的人或家庭一起 - 这是大多数记录都没有的额外的东西。

在我以前的网站版本中,我有一个故事表,标题,材料来源和slu ,,我为每个故事制作了一个html页面,然后我使用链接到该页面段塞值。

在Laravel中,这似乎是一种非常笨重的方式(特别是当我添加更多故事时),因为必须为每个故事制作一个新的路径/控制器/视图是混乱的。

所以我做了一个一般的StoryController并观看,希望重复使用它来显示任何故事的内容。我已经添加了一个'文本'列到我的故事表中的那些内容,我已经复制了HTML(有问题的字符被转义)。但是当我在视图上显示这个故事文本时,我看到所有的标记标签都是自己显示的(而不是帮助在段落中呈现实际的文本等)。

所以有两个问题:有没有办法将字段视为html本身(而不是字符串)?我的做法是非基础的,我应该以不同的方式做到这一点吗?

提前感谢您的帮助!

更新:感谢The Happy Mamba,如果我为html_entity_decode调用另一个函数并回显结果,它可以正常工作,但奇怪的是,如果我返回&,它会工作吗? #39;结果(或在同一个函数中执行)。它没有渲染标签,直到我这样做(在StoryController中):

public function convert($string)
{
    echo (html_entity_decode($string));
}

public function show($id)
{
    $story = Story::find($id);
    $content = StoryController::convert($story->text);

    return view ('story/show',  compact('story', 'content'));
}

因为它使用了回声,所以有一个障碍,无论如何都会首先显示该字段....所以如果我无法解决这个问题,我需要转换为如建议的那样在数据库之外(仍然需要使Connection字符串工作) - 但这是向前迈出的一大步!

2 个答案:

答案 0 :(得分:2)

您是否尝试将其从数据库中拉出来然后将文本发送到htmlentities

这是一些测试它的代码。示例在postgresql中,但应该与PDO / laravel特定函数相同:

<?php

$conn = pg_connect('db connection string here');

$text = pg_escape_literal( $conn, htmlentities( '<html><head></head><body><em>test</em></body></html>' ) );

pg_query( $conn, 'TRUNCATE TABLE test' );
pg_query( $conn, "INSERT INTO test VALUES ( {$text} )" );

$result = pg_query( $conn, 'SELECT * FROM test' );

$row = pg_fetch_row( $result );
pg_close( $conn );

$string = $row[0];

echo html_entity_decode($string);

?>

结果:

在浏览器中加粗“测试”。

答案 1 :(得分:0)

在尝试了一些事情后,我最喜欢的解决方案是为每个故事制作一个部分,然后根据story.slug动态地包含正确的故事。 (这样我仍然只需要一个故事路线/节目功能/视图,我可以比我将html填入数据库更容易更新内容)