Nano Hash - криптовалюты, майнинг, программирование

Symfony 1.4 и pjax (состояние отправки ajax)?

symfony: http://www.symfony-project.org pjax: https://github.com/defunkt/jquery-pjax

Всем привет,

Я пытаюсь использовать pjax в symfony, чтобы ускорить работу нашего веб-сайта (мы сможем большую часть времени сохранять статическими верхний и нижний колонтитулы, а также избегать перезагрузки большого количества css/js и других файлов).

У меня нет проблем с ajax или symfony, но я хочу знать, есть ли лучший способ:

  1. Это хорошая идея использовать postExecute для возврата html-кода сразу же без перехода sf к шаблону вообще
  2. Если да, то можно ли как-то написать это только один раз для всех модулей? Я представляю, что я могу сделать:

    mySfActions расширяет sfActions

    moduleActions расширяет mySfActions

Интересно, есть ли лучший способ? 3. Есть ли способ получить текущее имя макета (определенное в модуле view.yml) в контроллере/действии?


Ответы:


1

Вопрос 1: Не используйте post-execute таким образом. Если вам нужно вернуть html из вызова ajax в вашем действии, ваше действие должно вернуться следующим образом:

return $this->renderText("<p>Your html result.</p>");

Это пропустит вызов шаблона.

Вопрос 2: Это правильно. Вы написали лучший способ написать функцию один раз и сделать ее доступной для всех действий модуля.

13.07.2011
  • Привет, Кевин, не могли бы вы сказать мне, почему это не лучший способ использовать post-execute и какой способ лучше? Дэмиен объяснил в своем ответе, что мне не нужно ничего делать, если я просто хочу вернуть макет модуля, и это правда, но мне также нужен способ внедрить файлы js (определенные в каждом модуле view.yml) в заголовок ответа для загрузки, я думаю 14.07.2011
  • Post-execute не следует использовать для вызова шаблонов. Внедрение общих js-файлов с использованием pre-execute или post-execute — хорошая идея. Кроме того, если ваш ajax возвращает js, это нормально, если вы этого хотите. 18.07.2011

  • 2

    Здесь нечего делать.

    При вызове действия через XmlHttpRequest Symfony автоматически пропускает визуализацию макета и возвращает только визуализацию модуля.

    Вам нужно поместить все свои «статические» активы и html в свой макет, и все.

    13.07.2011
  • Вы правы, я забыл об этом. Но все же нужно что-то делать с javascript, потому что после загрузки нового контента мне нужно загрузить соответствующий файл с помощью js. Я думаю, мне все еще нужно каким-то образом вставить файлы js, определенные в view.yml, в заголовок ответа. 14.07.2011
  • Нет необходимости добавлять заголовки. Вы должны добавить include_javascripts(); поверх вашего шаблона. symfony-project.org/api/1_4/ 14.07.2011

  • 3

    Спасибо всем за помощь, все ваши ответы были полезны и указали мне правильное направление. Я хотел проголосовать за оба ответа, но, поскольку я могу принять только один, я принял самый первый ответ.

    Во всяком случае, вот что я сделал:

    Во-первых, я расширил класс sfActions, поэтому мне не нужно добавлять preExecute для каждого модуля:

    <?php 
    
    class mySfActions extends sfActions{
        public function preExecute(){
            $request = $this->getRequest(); 
            if ($request->getParameter('_pjax')) {
                $this->setLayout(false);
            }       
        }
    }
    

    Тогда, конечно, каждый из моих классов действий модуля должен расширять этот новый класс.

    Внутри моего индивидуального шаблона у меня есть что-то вроде этого:

    <?php if($sf_request->getParameter('_pjax')):?>
             <script type="text/javascript" src="/js/question_list.js"></script>
    <?php endif;?>
    

    В настоящее время это работает довольно хорошо для меня, мне нравится невероятная скорость загрузки, когда поддерживается pushstate, и я все еще могу отступить, когда это не так (например, в немом IE)

    27.07.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..