得到生成的HTML格式我使用Symfony2的產生形式,或實際嫩枝,它使用的Symfony的功能,所以認爲是這樣的:如何通過Symfony的
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
這將生成HTML代碼沒有任何新行或縮進。當我查看HTML源代碼時,這是不可讀的。
有什麼辦法強制Symfony/Twig格式化生成的HTML?
得到生成的HTML格式我使用Symfony2的產生形式,或實際嫩枝,它使用的Symfony的功能,所以認爲是這樣的:如何通過Symfony的
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
這將生成HTML代碼沒有任何新行或縮進。當我查看HTML源代碼時,這是不可讀的。
有什麼辦法強制Symfony/Twig格式化生成的HTML?
這link精美地解釋在樹枝的形式定製。有很多方式來應用CSS樣式來形成元素。例如,如果你有一個字段名稱的形式可以添加CSS類這樣說:
{# render a widget, but add a "foo" class to it #}
{{ form_widget(form.name, {'attr': {'class': 'foo'}}) }}
或標籤:
{{ form_label(form.name, 'Your Name', {'label_attr': {'class': 'foo'}}) }}
然後你就可以使用css類可根據您的設計呈現表單元素。希望你明白這個主意。答案中提供的docs和鏈接在這方面都很有用。
謝謝,+1爲一篇不錯的文章(稍後閱讀),但我不是指造型或頁面外觀如何呈現,而是HTML源代碼的外觀如何,我認爲我不是'不夠清楚。 –
即使對於標記,如果您呈現標籤,請在您的代碼中單獨輸入字段,並輸入
標籤,即可獲得乾淨可讀的標記。 –
更新:下面的 「解決方案」 made me a headache正是這條線:
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
它所有非ASCII字符轉換爲實體,這是不是很聰明。 Javascript的confirm
和alert
函數不會將其轉換回UTF-8,它們會以原樣顯示字符串。
謝謝大家,但我想我是不夠清楚:)我不是故意的CSS格式或一般改變呈現的頁面的樣子,而是改變HTML 源代碼。
。不管怎麼樣,這兩篇文章,我終於成功地做我想要的東西:
How do you format DOM structures in PHP?
第1步:
因此,首先響應監聽器,在(例如)AppBundle/EventListener/ResponseListener.php:
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
class ResponseListener {
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
function tidyHtml($html)
{
$dom = new \DOMDocument();
if (libxml_use_internal_errors(true) === true)
{
libxml_clear_errors();
}
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
$html = preg_replace(array('~\R~u', '~>[[:space:]]++<~m'), array("\n", '><'), $html);
if ((empty($html) !== true) && ($dom->loadHTML($html) === true))
{
$dom->formatOutput = true;
if (($html = $dom->saveXML($dom->documentElement, LIBXML_NOEMPTYTAG)) !== false)
{
$regex = array
(
'~' . preg_quote('<![CDATA[', '~') . '~' => '',
'~' . preg_quote(']]>', '~') . '~' => '',
'~></(?:area|base(?:font)?|br|col|command|embed|frame|hr|img|input|keygen|link|meta|param|source|track|wbr)>~' => ' />',
);
return '<!DOCTYPE html>' . "\n" . preg_replace(array_keys($regex), $regex, $html);
}
}
return false;
}
public function onKernelResponse(FilterResponseEvent $event) {
$request = $event->getRequest();
//only when format == html and environment == dev
if ($request->getRequestFormat() == 'html' && $this->container->get('kernel')->getEnvironment() == 'dev') {
$event->getResponse()->setContent($this->tidyHtml($event->getResponse()->getContent()));
}
}
}
第2步:
在services.yml:
response_listener:
class: AppBundle\EventListener\ResponseListener
arguments: ['@service_container']
tags:
- { name: kernel.event_listener, event: kernel.response, method : onKernelResponse }
看它在Firebug或類似的開發工具。 – malcolm
您是否看到[食譜](http://symfony.com/doc/current/cookbook/form/form_customization.html)的食譜? –
@malcom,謝謝,是的,我知道,但您確實知道Firebug/Chrome會顯示正確的源代碼,因此,例如,有一個結束標記丟失,你不會注意到使用上述工具。但無論如何+1 :) –