在 CakePHP 的 RequestHandler 中覆盖 JSON 视图

Override JSON view in RequestHandler in CakePHP

我想重写 JSON RequestHandler 中的视图。所以有一个文件project_root/lib/JsonView.php。我想做的是

public $components = array('RequestHandler' => array( 'viewClassMap' => array('json' => '/right/way/to/this/file/CustomJsonView', )));

但是我该如何为这个文件写正确的方式呢? 这个我也看了https://book.cakephp.org/2.0/en/core-libraries/components/request-handling.html#RequestHandlerComponent::viewClassMap 但没有关于文件正确路径的解释。我的 CakePHP 版本是 2.4.4 .

您不应该传递完整路径,而是 "short classnames",就像链接示例中所示,其中 ApiKit.MyJson 指的是 MyJsonView 视图 class ApiKit 插件,可能位于 app/Plugin/ApiKit/View/MyJsonView.php.

如果您按照惯例将 CustomJsonView class 放在 app/View/CustomJsonView.php as shown in the docs 中,那么您只需将 CustomJson 作为短 [=44] =]请求处理程序中的名称 viewClassMap 选项。

是使用 App::import() 还是仅使用 require 来包含 /lib/JsonView.php 文件,由您决定,两者都有效。无论如何,你必须确保你导入的任何东西都不会与现有的 class 名称冲突(JsonView 是一个保留名称,因为它已经存在于核心中),并且它是遵循 CakePHP 视图 class 命名约定,否则您必须扩展它。

另见