CodeIgniter возвращает другой формат запроса / тип содержимого html | json | xml и т. Д. - PullRequest
0 голосов
/ 30 марта 2012

Что является простым способом в CodeIgniter, чтобы я мог возвращать определенный тип содержимого для расширения URL запроса? Например, я хочу вернуть json, если URL равен http://example.com/phone/digits/1.json, html, если URL заканчивается в / 1 или /1.html, и XML, если URL заканчивается в /1.xml. Это загрузит представление в указанном формате. Таким образом, в приведенном выше примере (phone / digits / 1.json) будет возвращена json-версия метода digits. Вот то, что я до сих пор знаю, что это НЕ правильно работает, но дает представление о том, к чему я иду. В настоящее время он генерирует 404, если аргументы не передаются (/phone/digits.json) ... Любые предложения приветствуются.

class Phone extends CI_Controller {
    public $layout = FALSE;

    public function __construct()
    {
        if (preg_match('/\.(html|json)$/', $ci->uri->uri_string(), $matches))
        {
            $this->format = ('html' == $matches[1] || !isset($matches[1])) ? '' : '.json.php';  
        }
    }

    public function digits()
    {
      $this->load->view('phone/digits' . $this->format);
    }

Обновлено для ясности,

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Я не совсем понимаю ваш вопрос, если вы хотите упростить ваш URL

его решение для этого URL: http://domain.com/phone/digits.json (также XML или HTML) Но с небольшими изменениями это может быть полезно также с http://domain.com/phone/digits/n.json (n - id номер)

в config/routes.php

$route['phone/digits.(json|html|xml|php)'] = 'Phone/digits/$1';
$route['phone/digits'] = 'Phone/digits';

Контроллер

class Phone extends CI_Controller {
public $layout = FALSE;

public function __construct()
{
  //hmm
}

public function digits($format = '')
{
   if($format == '') {
     //default view or something else
   }
   else {
      $this->load->view('phone/digits' . $format);
   }
}
0 голосов
/ 31 марта 2012
  • парсинг URL
  • захват расширения
  • использование условного переключателя и установка соответствующего выхода

-

switch( $extension ){
    case 'json':
          $this->output
               ->set_content_type('application/json')
               ->set_output(json_encode(array('foo' => 'bar')));
    break;
    case 'xml':
          $this->output
               ->set_content_type('application/xml')
               ->set_output(file_get_contents(some_xml_file.xml));
    break;
    // etc etc
}
...