Concrete5.8 Express对象无法转换为String

时间:2017-01-05 10:11:10

标签: concrete5

按照指南

http://documentation.concrete5.org/developers/express/using-the-express-entry-block-to-output-entry-data

我能够创建相同的结果,但如果我更改示例并尝试使用快速对象的属性,即文件链接或日期字段,则视图块将返回以下错误

"类DoctrineProxies__CG __ \ Concrete \ Core \ Entity \ File \ File的对象无法转换为字符串"

可以修改以下代码来解决这个问题,还是核心问题?

<?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?>
<?php

if (isset($entry) && is_object($entry)) { 


$drawings = $entry->getDrawings();

?>




<table id="datatable", class="table">
    <thead>
    <tr>
        <th>Drawing Name</th>
        <th>Drawing Number</th>
        <th>Revision</th>
        <th>Revision Date</th>
        <th>Category</th>
        <th>PDF</th>            
    </tr>
    </thead>
    <tbody>
    <?php if (count($drawings)) {
        foreach($drawings as $drawing) { ?>
            <tr>
                <td><?=$drawing->getDrawingName()?></td>
                <td><?=$drawing->getDrawingNumber()?></td>
                <td><?=$drawing->getRevision()?></td>
                <td><?=$drawing->getDrawingRevisionDate()?></td>
                <td><?=$drawing->getDrawingCategory()?></td>
                <td><?=$drawing->getDrawingPdf()?></td>                                 

            </tr>
        <?php } ?>
    <?php } else { ?>
        <tr>
            <td colspan="6">No drawings found.</td>
        </tr>
    <?php } ?>
    </tbody>
</table>
<?php } ?>

1 个答案:

答案 0 :(得分:3)

问题来自这一行:

<?=$drawing->getDrawingPdf()?>

getDrawingPdf()返回的是一个文件对象,因此无法像简单的字符串一样输出到屏幕。首先,您必须从中提取字符串。例如,以下代码将提取文件名并显示它。

<?php
$drawingPdf = $drawing->getDrawingPdf();
$pdfFileName = is_object($drawingPdf)? $drawingPdf->getFileName() : '';
?>
<td><?=$pdfFileName?></td> 

此代码的作用是首先获取代码中已有的文件对象。 然后,如果我们有一个合适的文件对象,请获取文件名。如果它不是一个合适的文件对象(你现在从未将它删除),我们返回并清空字符串。 最后,我们在表中输出字符串$ pdfFileName(可以是文件名或空字符串)。

希望这有帮助