在 CakePHP 的 RequestHandler 中覆盖 JSON 视图
Override JSON view in RequestHandler in CakePHP
我想重写 JSON RequestHandler 中的视图。所以有一个文件project_root/lib/JsonView.php
。我想做的是
- 将
JsonView.php
文件导入 project_root/app/View/CustomJsonView.php
中的另一个文件。 (我想我可以使用 App:import
,对吗?)
- 像这样在requestHandler中选择这个文件作为自定义:
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 命名约定,否则您必须扩展它。
另见
我想重写 JSON RequestHandler 中的视图。所以有一个文件project_root/lib/JsonView.php
。我想做的是
- 将
JsonView.php
文件导入project_root/app/View/CustomJsonView.php
中的另一个文件。 (我想我可以使用App:import
,对吗?) - 像这样在requestHandler中选择这个文件作为自定义:
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 命名约定,否则您必须扩展它。
另见