如何在CakePHP

时间:2017-08-29 22:25:15

标签: php cakephp cakephp-1.2

我正在使用CakePHP 1.2。我正在研究其他人编写的CakePHP代码的逻辑。我正在检查以下控制器:

<?php
// For serving up images or other files.
class ImagesController extends AppController
{
    function __setupDir($destination)
    {
        ..........
    }
    function view()
    {
        ..........    
    }
}
?>

我知道CakePHP有一些约定,用于定义请求与URL匹配时如何调用特定操作。例如,鉴于我上面的ImagesController,我需要有这个文件:

应用程序/视图/图像/ view.ctp

然后我需要将浏览器指向例如:

http://localhost/myapplication/images/view

这应该执行为上面提到的ImagesController控制器定义的“view()”函数。这就是CakePHP 1.2约定的工作方式。

根据https://book.cakephp.org/1.2/en/The-Manual/Developing-with-CakePHP/Controllers.html,“动作是用于显示视图的控制器方法。动作是控制器的单一方法。”在我的例子中,“view()”函数是一个动作,但在我看到它的应用程序中它不用于显示视图。在我正在研究的代码中,我看到的是,有时在网站中加载图片或图像时,会执行ImagesController控制器的“view()”功能。我试图准确理解是什么触发了这个“view()”函数。我知道访问http://localhost/myapplication/images/view时没有发生这种情况。是否有另一种方法在CakePHP中执行控制器操作,特别是在CakePHP 1.2中?我只需要知道并找到触发此“view()”函数的代码。谢谢。

2 个答案:

答案 0 :(得分:1)

当您打开您提供的链接时,他们会在“危险”(红色)面板中写入:“此文档适用于不再受支持的CakePHP版本。请升级到较新版本!”

换句话说,它意味着:请...停止你做的事情并从最新版本的cakephp开始(现在是3.5

您将通过cakephp 1.2学到的很大一部分内容可能已被弃用,肯定不会推荐使用新的PSR。

抱歉兄弟! 对于你的问题,动作不仅是用于显示视图的控制器方法,如果你将$ this-&gt; autoRender设置为false,你的动作将不需要视图

例如,使用ajax操作或者您将启动一个不需要返回可视信息/输出(以呈现视图)但只需要在当前页面中显示单个消息的简单方法。 不需要输出(视图)但只获得结果的示例或方法

  • 删除某些内容(群组,产品,客户端......)
  • 退出用户
  • 检查用户是否使用授权IP地址进行连接,
  • ...

如果我理解你的问题, view和功能视图()不一样。 视图是输出(您在屏幕上看到的内容) 和wiew()是一个公共函数,用于显示应用程序中元素的细节(用户,组,产品,事件,课程......) 在创建应用程序时,对于每个元素/实体,您应该拥有一个具有最少CRUD个函数的控制器,

  1. C 用于创建/插入新实体(通常称为add()方法),
  2. R 读取/选择一个实体(称为view()方法)或实体列表(称为index()方法),
  3. U 更新元素(名为edit()的方法)和
  4. 要删除的
  5. D (名为delete()的方法)
  6. 这意味着在您的用户控制器(例如)中,您至少会找到索引(),添加()编辑( ),查看()和删除()方法以及其他公共功能(您的应用程序或此实体所需),例如登录(), 退出(), changePassword (), resetPassword ()以及 beforefilter callbacks方法( ), beforerender (), afterfilter (),允许您在控制器操作之前或之后插入一些逻辑......

    注意事项:

    1. 视图在layout内呈现,(布局是代码中不需要从页面更改为另一个页面的部分,视图是动态信息)
    2. Cakephp有一个代码生成器(bake),可以通过一个命令行,所有控制器,视图,模型等为您创建......
    3. 希望有所帮助

答案 1 :(得分:0)

我使用Debugger::trace()来检查和理解代码。这就是我的“view()”控制器动作的执行方式,例如:

ImagesController->view('blue-theme', 'timeleft1.jpg')