Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter返回不同的请求格式/内容类型html | json | xml等_Php_Codeigniter_Response_Content Type - Fatal编程技术网

Php CodeIgniter返回不同的请求格式/内容类型html | json | xml等

Php CodeIgniter返回不同的请求格式/内容类型html | json | xml等,php,codeigniter,response,content-type,Php,Codeigniter,Response,Content Type,在CodeIgniter中,有什么简单的方法可以为请求URL扩展返回特定的内容类型?例如,如果url为,则返回json;如果url以/1或/1.html结尾,则返回html;如果url以/1.XML结尾,则返回XML。这将以指定的格式加载视图。因此,在上面的示例中(phone/digits/1.json)将返回digits方法的json版本。这里是我到目前为止得到的不正确的工作,但给出了我的想法。如果没有传递任何参数(/phone/digits.json),它当前将生成一个404。。。如有任何建

在CodeIgniter中,有什么简单的方法可以为请求URL扩展返回特定的内容类型?例如,如果url为,则返回json;如果url以/1或/1.html结尾,则返回html;如果url以/1.XML结尾,则返回XML。这将以指定的格式加载视图。因此,在上面的示例中(phone/digits/1.json)将返回digits方法的json版本。这里是我到目前为止得到的不正确的工作,但给出了我的想法。如果没有传递任何参数(/phone/digits.json),它当前将生成一个404。。。如有任何建议,将不胜感激

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);
    }

为了清晰起见,我没有很好地理解你的问题,因为你想简化你的url

它对此url的解决方案:http://domain.com/phone/digits.json(也可使用xml或html) 但是只要稍加修改,它也可以用于http://domain.com/phone/digits/n.json(n-身份证号码)

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);
   }
}
  • 解析url
  • 抓住分机
  • 使用开关条件并设置相关输出
-


萨法罗夫:我真的很感谢你的回复,但这并不是我想要的。萨法罗夫:问题是我试图在整个网站范围内对每个控制器和每个控制器方法进行更新。我发现,如果我覆盖CI_路由器,我可以修复/phone/digits.json问题(它正在电话控制器中寻找“digits.json”方法),但我一生都无法让CI覆盖核心路由器类,即使我在线看到可以在应用程序/库文件夹中使用MY_路由器类。是的,你可以覆盖核心库,控制器和模型。在Core文件夹和u constructor中创建我的u controller管理您想要的任何东西,您也可以在.htaccess上执行一些转发。我有一个MY u Router.php类(在应用程序/库中),它扩展了CI u Router并调用父类构造函数(父:u construct())。我遗漏了一些东西,因为它根本没有被调用。对于下一个调用My_Router.php的人,需要在application/core中。我知道如果你不发送参数,它会给出404,但是
phone/digits/1.json
到底做什么呢?它返回json“视图”文件phone/digits.json.php。
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
}