Является ли это приемлемым действием Ajax для автоматического завершения CakePHP? - PullRequest
2 голосов
/ 12 февраля 2011

Я относительно новичок в CakePHP, и мне было интересно, как опытные пользователи структурируют свои методы ajax. Целью кода является создание списка подходящих продуктов JSON для автозаполнения jQuery.

 function autocomplete() {
            $terms = $this->params['url']['q'];
            if (!$this->RequestHandler->isAjax()) {
                $products = $this->Product->find('list', array(
                    'conditions' => array(
                        'Product.name LIKE' => '%'.$terms.'%',
                    ),
                    'limit' => 7,
                    'order' => 'Product.name',
                    'contain' => false
                ));
                exit(json_encode($products));
            } else {
                $this->redirect();
            }
        }

Мне кажется немного глупым просто бросить выход (), но опять же, мне не нужно запускать какие-либо представления, не так ли?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2011

Вот что я делал в прошлом:

В config/routes.php, добавьте следующее:

Router::mapResources(array('restaurants', 'items'));
Router::parseExtensions('json');

В app/app_controller.php:

function beforeFilter() {
    if ($this->isApiCall()) {
        Configure::write('debug', 0);
    }
}

function isApiCall() {
    return $this->RequestHandler->isAjax()
        || $this->RequestHandler->isXml()
        || $this->RequestHandler->prefers('json');
}

Затем в app/views/items и app/views/restaurants у меня есть папка json под каждой с соответствующим файлом представления для каждого действия в контроллере.Запросы выполняются с расширением .json.

Наконец, у меня есть файл макета в app/views/layouts/json/default.ctp со следующим:

<?php echo $content_for_layout; ?>

Например, http://mydomain.com/items/view.json картына app/views/items/json/view.ctp, который содержит:

<?php echo $javascript->object($item); ?>

$item был заполнен в файле app/controllers/items_controller.php.

Не уверен, поможет ли это добавить к путанице, но вот как яя использовал JSON в моих приложениях CakePHP.

ОБНОВЛЕНИЕ: Добавлена ​​информация о макете.

0 голосов
/ 12 февраля 2011

Я использую макет ajax без чего-либо, кроме

<?php echo $content_for_layout ?>

Затем я просто создаю представление autocomplete.ctp, в котором я повторяю закодированную переменную json.

autocomplete.ctp

<?php echo json_encode($products); ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...