簡體   English   中英

如何在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,我將需要具有以下文件:

應用程序/視圖/圖像/ view.ctp

然后,我需要將瀏覽器指向如下所示:

HTTP://本地主機/所有MyApplication /圖像/視圖

那應該執行為上述ImagesController控制器定義的“ view()”函數。 這就是CakePHP 1.2約定的工作方式。

根據https://book.cakephp.org/1.2/zh-CN/The-Manual/Developing-with-CakePHP/Controllers.html ,“動作是用於顯示視圖的控制器方法。動作是控制器的一種方法。 “ 就我而言,“ view()”函數是一個操作,但是從我所看到的應用程序中,它並沒有用於顯示視圖。 在我正在研究的代碼中,我看到的是有時將圖片或圖像加載到網站中時,將執行ImagesController控制器的“ view()”函數。 我試圖確切地了解是什么觸發了此“ view()”函數。 我知道訪問http:// localhost / myapplication / images / view時不會發生這種情況。 通常,在CakePHP中,特別是在CakePHP 1.2中,是否有另一種執行控制器動作的方法? 我只需要知道並找到觸發此“ view()”函數的代碼。 謝謝。

當您打開給出的鏈接時,他們會在“危險”(紅色)面板中寫道:“此文檔適用於不再支持的CakePHP版本。請升級到較新的版本!”

換句話說,這意味着:請...停止您的操作,並從最新版本的cakephp開始(現在是3.5

在Cakephp 1.2中您將學到的大部分內容可能已被棄用,並且肯定不會在新的PSR中被推薦。


對不起兄弟! 對於您的問題,操作不僅是用於顯示視圖的控制器方法,如果將$ this-> autoRender設置為false,則操作將不需要視圖

例如,使用ajax動作或何時啟動簡單的方法,而該方法不需要返回視覺信息/輸出(以呈現視圖),而只需返回當前頁面中的一條消息即可。 不需要輸出(視圖)但僅獲得結果的示例或方法

  • 刪除某些內容(組,產品,客戶等)
  • 注銷用戶
  • 檢查用戶是否使用授權IP地址進行連接,
  • ...

如果我理解您的問題,則視圖和函數view()是不相同的 視圖是輸出(您在屏幕上看到的),而wiew()是一個公共函數,用於顯示應用程序中某個元素的詳細信息(用戶,組,產品,事件,課程,... 。)在創建應用程序時,對於每個元素/實體,您都應該擁有一個具有最少CRUD功能的控制器,

  1. C用於創建/插入新實體(通常稱為add()方法),
  2. R讀取/選擇一個實體(稱為view()方法)或實體列表(稱為index()方法),
  3. U更新元素(方法稱為edit())並
  4. D刪除(方法為delete())

這意味着,在您的Users控制器中(例如),您將至少找到index (), add () edit (), view ()和delete ()方法以及其他公共功能(您的應用程序或此實體需要)像登錄 (), 注銷 (),changePassword(),resetPassword()回調方法,如beforefilter(),beforerender(), 后過濾器 (),讓你之前或之后控制器動作插入一些邏輯?

注意2件事:

  1. 視圖是在布局內部渲染的(布局是代碼的一部分,不需要從頁面更改為另一頁面,視圖是動態信息)
  2. Cakephp有一個代碼生成器( bake ),可以使用一個命令行,所有的控制器,視圖,模型等為您創建代碼生成器。

希望能幫助到你

我使用Debugger::trace()來檢查和理解代碼。 例如,這就是我的“ view()”控制器動作的執行方式:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM