如何在 CakePHP 中执行控制器操作
How to execute a controller action in CakePHP
我正在使用 CakePHP 1.2。我正在研究别人写的CakePHP代码的逻辑。我正在检查以下控制器:
<?php
// For serving up images or other files.
class ImagesController extends AppController
{
function __setupDir($destination)
{
..........
}
function view()
{
..........
}
}
?>
我知道 CakePHP 有定义当请求匹配 URL 时如何调用特定操作的约定。例如,鉴于我上面的 ImagesController,我需要这个文件:
app/views/images/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, "actions are controller methods used to display views. An action is a single method of a controller." 在我的例子中,"view()" 函数是一个动作,但在我看到的应用程序中,它没有被用来显示视图。在我研究的代码中,我看到的是,有时在网站中加载图片或图像时,会执行 ImagesController 控制器的 "view()" 函数。我试图了解究竟是什么触发了这个 "view()" 函数。我知道访问 http://localhost/myapplication/images/view 时不会发生这种情况。一般来说,在 CakePHP 中,或者特别是在 CakePHP 1.2 中,是否有其他方法可以执行控制器操作?我只需要知道并找到触发此 "view()" 函数的代码。谢谢。
当你打开你给的 link 时,他们会在 "danger"(红色)面板中写上:"This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!"
换句话说就是:请...停止你所做的并从最新版本的cakephp开始(现在是3.5)
你将在 cakephp 1.2 中学到的大部分内容可能已被弃用,并且肯定不会推荐使用新的 PSR。
对不起兄弟!
对于你的问题,动作不仅是用于显示视图的控制器方法,如果你将 $this->autoRender 设置为 false,你的动作将不需要视图
例如,使用 ajax 操作,或者当您将启动一个不需要 return 视觉信息/输出(以呈现视图)而只需要一条消息的简单方法时在您的当前页面中)。
不需要输出(视图)而只得到结果的例子或方法
- 删除某些内容(一个组、一个产品、一个客户……)
- 注销用户
- 检查用户是否使用授权 IP 地址进行连接,
- ...
如果我理解你的问题,view 和函数 view() 是不一样的。
views 是输出(你在屏幕上看到的)
wiew() 是一个 public 函数,用于显示应用程序中元素的详细信息(用户、组、产品、事件、课程......)
当你创建一个应用程序时,对于每个元素/实体,你应该有一个至少具有 CRUD 功能的控制器,
- C 用于创建/插入新实体(一般称为add()方法),
- R读取/select一个实体(调用view()方法)或实体列表(调用index()方法),
- U 更新元素(调用 edit() 的方法)和
- D 删除(调用 delete() 的方法)
这意味着在你的用户控制器中(例如)你至少会发现,index(), add() edit()、view() 和 delete() 方法以及其他 public 函数(您的应用程序或此实体需要)例如 login()、logout()、changePassword( )、resetPassword() 和 callbacks 方法,例如 beforefilter()、beforerender( ), afterfilter() 让你在控制器操作之前或之后插入一些逻辑...
注意两件事:
- 视图在 layout 内呈现,(布局是代码中不需要从一个页面更改到另一个页面的部分,视图是动态信息)
- Cakephp 有一个代码生成器 (bake),它使用一个命令行为您创建所有控制器、视图、模型……[=66=]
希望对您有所帮助
我用Debugger::trace()
检查并理解了代码。这就是我的 "view()" 控制器操作的执行方式,例如:
ImagesController->view('blue-theme', 'timeleft1.jpg')
我正在使用 CakePHP 1.2。我正在研究别人写的CakePHP代码的逻辑。我正在检查以下控制器:
<?php
// For serving up images or other files.
class ImagesController extends AppController
{
function __setupDir($destination)
{
..........
}
function view()
{
..........
}
}
?>
我知道 CakePHP 有定义当请求匹配 URL 时如何调用特定操作的约定。例如,鉴于我上面的 ImagesController,我需要这个文件:
app/views/images/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, "actions are controller methods used to display views. An action is a single method of a controller." 在我的例子中,"view()" 函数是一个动作,但在我看到的应用程序中,它没有被用来显示视图。在我研究的代码中,我看到的是,有时在网站中加载图片或图像时,会执行 ImagesController 控制器的 "view()" 函数。我试图了解究竟是什么触发了这个 "view()" 函数。我知道访问 http://localhost/myapplication/images/view 时不会发生这种情况。一般来说,在 CakePHP 中,或者特别是在 CakePHP 1.2 中,是否有其他方法可以执行控制器操作?我只需要知道并找到触发此 "view()" 函数的代码。谢谢。
当你打开你给的 link 时,他们会在 "danger"(红色)面板中写上:"This document is for a version of CakePHP that is no longer supported. Please upgrade to a newer release!"
换句话说就是:请...停止你所做的并从最新版本的cakephp开始(现在是3.5)
你将在 cakephp 1.2 中学到的大部分内容可能已被弃用,并且肯定不会推荐使用新的 PSR。
对不起兄弟! 对于你的问题,动作不仅是用于显示视图的控制器方法,如果你将 $this->autoRender 设置为 false,你的动作将不需要视图
例如,使用 ajax 操作,或者当您将启动一个不需要 return 视觉信息/输出(以呈现视图)而只需要一条消息的简单方法时在您的当前页面中)。 不需要输出(视图)而只得到结果的例子或方法
- 删除某些内容(一个组、一个产品、一个客户……)
- 注销用户
- 检查用户是否使用授权 IP 地址进行连接,
- ...
如果我理解你的问题,view 和函数 view() 是不一样的。 views 是输出(你在屏幕上看到的) wiew() 是一个 public 函数,用于显示应用程序中元素的详细信息(用户、组、产品、事件、课程......) 当你创建一个应用程序时,对于每个元素/实体,你应该有一个至少具有 CRUD 功能的控制器,
- C 用于创建/插入新实体(一般称为add()方法),
- R读取/select一个实体(调用view()方法)或实体列表(调用index()方法),
- U 更新元素(调用 edit() 的方法)和
- D 删除(调用 delete() 的方法)
这意味着在你的用户控制器中(例如)你至少会发现,index(), add() edit()、view() 和 delete() 方法以及其他 public 函数(您的应用程序或此实体需要)例如 login()、logout()、changePassword( )、resetPassword() 和 callbacks 方法,例如 beforefilter()、beforerender( ), afterfilter() 让你在控制器操作之前或之后插入一些逻辑...
注意两件事:
- 视图在 layout 内呈现,(布局是代码中不需要从一个页面更改到另一个页面的部分,视图是动态信息)
- Cakephp 有一个代码生成器 (bake),它使用一个命令行为您创建所有控制器、视图、模型……[=66=]
希望对您有所帮助
我用Debugger::trace()
检查并理解了代码。这就是我的 "view()" 控制器操作的执行方式,例如:
ImagesController->view('blue-theme', 'timeleft1.jpg')