cakephp请求操作方法视图文件

cakephp请求操作方法视图文件,cakephp,view,model,controller,Cakephp,View,Model,Controller,如何从我的视图调用requestAction方法到特定的控制器,该控制器根据我提到的条件返回me结果 谢谢 $comments = $this->requestAction('/comments/latest'); foreach($comments as $comment) { echo $comment['Comment']['title']; } 将此代码放入ctp文件中 将此代码放在ctp文件中一般来说,使用requestAction的性能不是很好,因为它开始了一个全新的

如何从我的
视图
调用
requestAction
方法到特定的
控制器
,该控制器根据我提到的条件返回
me结果

谢谢

$comments = $this->requestAction('/comments/latest');
foreach($comments as $comment) {
    echo $comment['Comment']['title'];
}
将此代码放入ctp文件中


将此代码放在ctp文件中

一般来说,使用
requestAction
的性能不是很好,因为它开始了一个全新的分派过程——本质上,您的应用程序正在为用户发出的每一个请求处理两个请求。因此,您希望尽可能避免使用它。也就是说,
requestAction
有它的用途,您可以使用视图缓存来减轻性能的影响

很难准确衡量你想用
requestAction
做什么,但基本概念是你要求CakePHP处理另一个请求,因此你只需将
requestAction
输入浏览器地址栏(不包括协议和主机名)后你的应用程序将处理的任何URL传递给用户即可。如果要检索由应用程序管理的博客集合,请执行以下操作:

  $blogs = $this->requestAction('/blogs/index');
您还可以通过向其传递路由组件数组来调用
requestAction
,方法与将它们传递到
HtmlHelper::link
中的方法相同。因此,您可以通过以下方式检索博客集合:

  $blogs = $this->requestAction('controller'=>'blogs', 'action'=>'index');
就过滤由
requestAction
返回的结果集而言,再次通过将条件作为URL或路由组件的一部分传递来完成:

  $blogs = $this->requestAction('/blogs/index/author_id:1234');
  // or
  $blogs = $this->requestAction('controller'=>'blogs', 'action'=>'index', 'author_id' => 1234);
请注意,如果希望请求的操作返回值,则需要该操作以不同于标准操作请求的方式处理请求。对于我上面提到的
BlogsController::index
操作,它可能看起来像这样:

class BlogsController extends AppController{
  function index(){
    $conditions = array();
    if ( isset($this->params['author_id'])){
      $conditions['Blog.author_id'] = $this->params['author_id'];
    }

    $blogs = $this->Blog->find('all', array('conditions'=>$conditions);

    if ( isset($this->params['requested']) && $this->params['requested'] == 1){
      return $blogs;
    }
    else{
      $this->set(compact('blogs'));
    }
  }
}
检查
$this->params['requested']
的存在和值的
if
语句是关键部分。它检查操作是否由
requestAction
调用。如果是,则返回由
Blog::find
返回的Blog集合;否则,它将使集合对视图可用,并允许控制器继续渲染视图

使用
requestAction
获得所需的特定结果有许多细微差别,但以上内容应为您提供基本知识。查看dogmatic69发布的链接以获取更多文档,当然,在这个主题上有许多stacko问题


欢迎随时评论任何后续行动!希望这能有所帮助。

一般来说,使用
requestAction
的性能不是很好,因为它开始了一个全新的分派过程——实际上,您的应用程序正在为用户发出的每一个请求处理两个请求。因此,您希望尽可能避免使用它。也就是说,
requestAction
有它的用途,您可以使用视图缓存来减轻性能的影响

很难准确衡量你想用
requestAction
做什么,但基本概念是你要求CakePHP处理另一个请求,因此你只需将
requestAction
输入浏览器地址栏(不包括协议和主机名)后你的应用程序将处理的任何URL传递给用户即可。如果要检索由应用程序管理的博客集合,请执行以下操作:

  $blogs = $this->requestAction('/blogs/index');
您还可以通过向其传递路由组件数组来调用
requestAction
,方法与将它们传递到
HtmlHelper::link
中的方法相同。因此,您可以通过以下方式检索博客集合:

  $blogs = $this->requestAction('controller'=>'blogs', 'action'=>'index');
就过滤由
requestAction
返回的结果集而言,再次通过将条件作为URL或路由组件的一部分传递来完成:

  $blogs = $this->requestAction('/blogs/index/author_id:1234');
  // or
  $blogs = $this->requestAction('controller'=>'blogs', 'action'=>'index', 'author_id' => 1234);
请注意,如果希望请求的操作返回值,则需要该操作以不同于标准操作请求的方式处理请求。对于我上面提到的
BlogsController::index
操作,它可能看起来像这样:

class BlogsController extends AppController{
  function index(){
    $conditions = array();
    if ( isset($this->params['author_id'])){
      $conditions['Blog.author_id'] = $this->params['author_id'];
    }

    $blogs = $this->Blog->find('all', array('conditions'=>$conditions);

    if ( isset($this->params['requested']) && $this->params['requested'] == 1){
      return $blogs;
    }
    else{
      $this->set(compact('blogs'));
    }
  }
}
检查
$this->params['requested']
的存在和值的
if
语句是关键部分。它检查操作是否由
requestAction
调用。如果是,则返回由
Blog::find
返回的Blog集合;否则,它将使集合对视图可用,并允许控制器继续渲染视图

使用
requestAction
获得所需的特定结果有许多细微差别,但以上内容应为您提供基本知识。查看dogmatic69发布的链接以获取更多文档,当然,在这个主题上有许多stacko问题


欢迎随时评论任何后续行动!希望这能有所帮助。

来自Elijan:你为什么要从视图上这样做?(严肃的问题)来自Elijan:为什么你想从观点上这么做?(严肃的问题)您添加的大括号是完全多余的,仅供参考。如果在
If
else
之后只出现一条语句,则无需将其用大括号括起来。除非您喜欢可读性并遵守严格的编码标准。我的大部分if语句都会在以后进行修改。添加新语句意味着我必须添加大括号。忘记这样做会使调试工作更加繁重,所以我决定再也不忽略它们。除非我绝对知道没有代码会被添加到特定的布尔状态,这是非常罕见的。你添加的大括号是完全多余的,仅供参考。如果在
If
else
之后只出现一条语句,则无需将其用大括号括起来。除非您喜欢可读性并遵守严格的编码标准。我的大部分if语句都会在以后进行修改。添加新语句意味着我必须添加大括号。忘记做这件事会使调试工作更加繁重,所以我决定永远不要把它们留在o