【问题标题】:Symfony: templating, check if base.html.php is already extendedSymfony:模板,检查 base.html.php 是否已经扩展
【发布时间】:2014-08-29 12:56:05
【问题描述】:

我有一个小问题。

我目前正在创建一个适用于 ajax 调用的菜单,并且应该只替换特定的路径部分。

我的base.html.php 是这个:

<html>
  <head>
  </head>
  <body>
    <nav>
    </nav>
    <div id="contentWrapper">
      <div id="sidebar">
        <?php if ($view['slots']->has('sidebar')): ?>
          <?php $view['slots']->output('sidebar') ?>
        <?php endif; ?>
      </div>
      <div id="content">
        <?php $view['slots']->output('content') ?>
      </div>
    </div>
  </body>
</html>

我的页面都是这样构建的:

<?php $view->extend('Bundle::base.html.php') ?>
<?php $view['slots']->start('sidebar') ?>
<ul>
</ul>
<?php $view['slots']->stop() ?>
<?php $view['slots']->start('content') ?>
  some content
<?php $view['slots']->stop() ?>

我现在的问题是,当我通过 ajax 调用加载新页面并替换 contentWrapper 时,它还会再次将整个 base.html.php 放入我的 contentWrapper。 问题是,我使用当前的方式,因为它应该也可以通过单个 URL 访问整个 base.html.php 的文件,而无需先单击。

有没有办法检查base.html.php 是否已经扩展? 或者是否有其他解决方案可以更轻松地解决我的问题?

【问题讨论】:

    标签: php ajax symfony templating


    【解决方案1】:

    您应该检查它是否是控制器中的 ajax 请求,然后有条件地扩展到 base.html.php 模板:

    控制器:

    public function someAction()
    {
        $request = $this->getRequest();
    
        // ...
        return $this->render(
            'MyBundle:Controller:action.html.php', 
            array('isAjax' => $request->isXmlHttpRequest())
        );
    }
    

    模板:

    <?php 
    if ($isAjax) { 
        $view->extend('Bundle::base.html.php');
    }
    // ...
    ?>
    

    或者您也可以直接在模板中检查:

    <?php 
    if ($app->request->xmlHttpRequest) { 
        $view->extend('Bundle::base.html.php');
    }
    // ...
    ?>
    

    或者最后,您可以从响应中仅获取您想要的 html 内容(这不是最干净的方式,因为您检索了无用的内容)。假设您使用 jQuery 进行 ajax 请求:

    $.get('/url', function(html){
        $('#contentWrapper').html($(html).find('#contentWrapper').html());
    });
    // or 
    $('#contentWrapper').load('/url #contentWrapper');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多