在Magento中,控制器通常做什么?

在Magento中,控制器通常做什么?,magento,controller,Magento,Controller,我见过一些控制器的基本示例,在它们的indexAction()方法中,它们执行类似于echo“这是一个索引操作”的操作。但在实际应用程序中,该方法是否会返回一个长字符串html,从 谢谢。实际上,大多数控制器使用XML布局生成一系列应显示在页面上的逻辑块,然后递归呈现这些块以构建页面。请注意,它们实际上并不返回该字符串,布局类负责将输出放到正确的位置。这是您在这种情况下通常会看到的代码: $this->loadLayout(); $this->renderLayout(); 使用

我见过一些控制器的基本示例,在它们的indexAction()方法中,它们执行类似于echo“这是一个索引操作”的操作。但在实际应用程序中,该方法是否会返回一个长字符串html,从


谢谢。

实际上,大多数控制器使用XML布局生成一系列应显示在页面上的逻辑块,然后递归呈现这些块以构建页面。请注意,它们实际上并不返回该字符串,布局类负责将输出放到正确的位置。这是您在这种情况下通常会看到的代码:

$this->loadLayout();
$this->renderLayout(); 
使用echo是一种快速的速记,它可以让开发人员暂时忽略整个布局系统,只关注触发正确的操作

希望能把事情弄清楚一点

谢谢,
Joe

您看到的示例只是向您展示控制器中的代码正在执行。你在Magento控制器中应该做的是

  • 根据请求中的值(get、post等)操纵模型

  • 告诉Magento加载并呈现将构成响应的布局

  • 布局/块系统直接从系统模型类读取,因此无需在控制器中执行任何与输出相关的操作(这不是100%正确,但如果您知道其不是100%正确的原因,则无需阅读答案中的这一部分)

    如果你看看Magento Core控制器,你会发现大多数控制器都以

    $this->loadLayout();
    $this->renderLayout(); 
    

    这些是开始输出的行。无
    echo
    要求。

    感谢您的回答,一如既往的帮助。我发现这是一个程序员偏好的问题,模型操作应该在控制器还是块中执行。毫无疑问,访问控制和业务逻辑的执行属于控制器(IMHO),但加载、分页、排序、过滤模型数据等操作通常在块中执行。然而,这是一条灰色的线。你能把你的答案扩大到这条灰线吗?谢谢。你能解释一下调用loadLayout加载的是什么布局吗?有这么多的信息,但没有一个好的资源。自定义模块只能有一个布局,还是可以有多个布局?应该在哪里定义它/它们?我想是在config.xml中,但在adminhtml部分还是前端部分?布局文件在文件系统中位于何处?我一直在寻找一篇简洁的文章来解释这一点,但运气不好。@user我花了3年时间来解释这一点。从面向MVC开发人员的Magento开始。然后买这本书@Jonathan Magento Inc.自己在系统的不同区域处理灰线的方式不同,所以我不确定这里有多少经典的说法。制定自己的内部指导方针,遵循这些指导方针,并在发现什么对您和您的团队有效时重新考虑。