# 后臺控制器定義
## 后臺控制器
### 介紹
October后端實現了MVC模式。控制器管理后端頁面并實現各種功能,例如表單和列表。本文介紹如何開發后端控制器以及如何配置控制器行為。
每個控制器都用一個PHP腳本表示,該腳本位于Plugin目錄的**/ controllers**子目錄中。控制器視圖是`.htm`駐留在控制器視圖目錄中的文件。控制器視圖目錄名稱與小寫的控制器類名稱匹配。視圖目錄還可以包含控制器配置文件。控制器目錄結構的示例:
~~~
plugins/
acme/
blog/
controllers/
users/ <=== Controller view directory
_partial.htm <=== Controller partial file
config_form.yaml <=== Controller config file
index.htm <=== Controller view file
Users.php <=== Controller class
Plugin.php
~~~
### [](https://octobercms.com/docs/backend/controllers-ajax#class-definition)類定義
控制器類必須擴展`\Backend\Classes\Controller`該類。與其他任何插件類一樣,控制器應屬于[插件名稱空間](https://octobercms.com/docs/plugin/registration#namespaces)。插件中使用的Controller的最基本表示如下:
~~~
namespace Acme\Blog\Controllers;
class Posts extends \Backend\Classes\Controller {
public function index() // <=== Action method
{
}
}
~~~
通常,每個控制器都實現用于處理單一類型數據的功能-例如博客文章或類別。下面描述的所有后端行為均采用此約定。
### [](https://octobercms.com/docs/backend/controllers-ajax#controller-properties)控制器屬性
后端控制器基類定義了許多屬性,這些屬性允許配置頁面外觀和管理頁面安全性:
| 屬性 | 描述 |
| --- | --- |
| **$fatalError** | 允許存儲在操作方法中生成的致命異常,以便在視圖中顯示該異常。 |
| **$user** | 包含對后端用戶對象的引用。 |
| **$suppressView** | 允許阻止視圖顯示。可以在操作方法或控制器構造函數中進行更新。 |
| **$params** | 路由參數的數組。 |
| **$action** | 當前請求中正在執行的操作方法的名稱。 |
| **$publicActions** | 定義了無需后端用戶身份驗證即可使用的一系列操作。可以在類定義中覆蓋。 |
| **$requiredPermissions** | 查看此頁面所需的權限。可以在類定義或控制器構造函數中設置。有關詳細信息,請參見[用戶和權限](https://octobercms.com/docs/backend/users)。 |
| **$pageTitle** | 設置頁面標題。可以在動作方法中設置。 |
| **$bodyClass** | 用于自定義布局的body類屬性。可以在控制器構造函數或操作方法中設置。 |
| **$guarded** | 控制器特定的方法,不能稱為動作。可以在控制器構造函數中擴展。 |
| **$layout** | 為控制器視圖指定自定義布局(請參見下面的[布局](https://octobercms.com/docs/backend/controllers-ajax#layouts))。 |
### [](https://octobercms.com/docs/backend/controllers-ajax#actions-views-routing)動作,視圖和路由
稱為**動作的**公共控制器方法與**視圖文件**耦合,該**視圖文件**表示對應于該動作的頁面。后端視圖文件使用PHP語法。**index.htm**視圖文件內容的示例,對應于**index**操作方法:
~~~
<h1>Hello World</h1>
~~~
該頁面的URL由作者名稱,插件名稱,控制器名稱和操作名稱組成。
~~~
backend/[author name]/[plugin name]/[controller name]/[action name]
~~~
上面的Controller結果如下:
~~~
http://example.com/backend/acme/blog/users/index
~~~
### [](https://octobercms.com/docs/backend/controllers-ajax#passing-data-to-views)將數據傳遞到視圖
使用控制器的`$vars`屬性將任何數據直接傳遞到您的視圖:
~~~
$this->vars['myVariable'] = 'value';
~~~
`$vars`現在可以在您的視圖中直接訪問隨屬性傳遞的變量:
~~~
<p>The variable value is <?= $myVariable ?></p>
~~~
### [](https://octobercms.com/docs/backend/controllers-ajax#navigation-context)設置導航上下文
插件可以在[插件注冊文件中注冊](https://octobercms.com/docs/plugin/registration#navigation-menus)后端導航菜單和子菜單。導航上下文確定當前后端頁面激活的后端菜單和子菜單。您可以使用以下`BackendMenu`類設置導航上下文:
~~~
BackendMenu::setContext('Acme.Blog', 'blog', 'categories');
~~~
第一個參數指定作者和插件名稱。第二個參數設置菜單代碼。可選的第三個參數指定子菜單代碼。通常,您`BackendMenu::setContext`在控制器構造函數中調用。
~~~
namespace Acme\Blog\Controllers;
class Categories extends \Backend\Classes\Controller {
public function __construct()
{
parent::__construct();
BackendMenu::setContext('Acme.Blog', 'blog', 'categories');
}
~~~
您可以`$pageTitle`使用controller類的屬性設置后端頁面的標題(請注意,表單和列表行為可以為您完成此操作):
~~~
$this->pageTitle = 'Blog categories';
~~~
### [](https://octobercms.com/docs/backend/controllers-ajax#ajax)使用AJAX處理程序
后端AJAX框架使用與前端頁面相同的[AJAX庫](https://octobercms.com/docs/ajax/introduction)。該庫將自動加載到后端頁面上。
### [](https://octobercms.com/docs/backend/controllers-ajax#ajax-handlers)后端AJAX處理程序
后端AJAX處理程序可以在控制器類或[小部件中](https://octobercms.com/docs/backend/widgets)定義。在控制器類中,AJAX處理程序被定義為公共方法,其名稱以“ on”字符串開頭:**onCreateTemplate**,**onGetTemplateList**等。
后端AJAX處理程序可以返回數據數組,引發異常或重定向到另一個頁面(請參閱[AJAX事件處理程序](https://octobercms.com/docs/ajax/handlers))。您可以使用`$this->vars`設置變量和控制器的`makePartial`方法來呈現部分內容并將其內容作為響應數據的一部分返回。
~~~
public function onOpenTemplate()
{
if (Request::input('someVar') != 'someValue') {
throw new ApplicationException('Invalid value');
}
$this->vars['foo'] = 'bar';
return [
'partialContents' => $this->makePartial('some-partial')
];
}
~~~
### [](https://octobercms.com/docs/backend/controllers-ajax#triggering-ajax-requests)觸發AJAX請求
可以使用數據屬性API或JavaScript API觸發AJAX請求。有關詳細信息,請參見[前端AJAX庫](https://octobercms.com/docs/ajax/introduction)。以下示例顯示了如何使用后端按鈕觸發請求。
~~~
<button
type="button"
data-request="onDoSomething"
class="btn btn-default">
Do something
</button>
~~~
> **注意**:您可以使用前綴專門針對小部件的AJAX處理程序`widget::onName`。有關更多詳細信息,請參見[小部件AJAX處理程序文章](https://octobercms.com/docs/backend/widgets#generic-ajax-handlers)。
### [](https://octobercms.com/docs/backend/controllers-ajax#controller-middleware)控制器中間件
您可以在后端控制器中定義中間件,從而為更改HTTP請求的響應提供方便的機制。例如,您可能希望為控制器中的某些操作指定HTTP標頭,或者如果用戶不符合某些條件,則將其重定向。
在十月CMS處理請求之后,但在將響應發送到瀏覽器之前,將執行控制器中間件。
要為控制器定義中間件,可以在`__construct()`Backend控制器的`middleware()`方法中通過調用該方法來指定中間件。
~~~php
public function __construct()
{
parent::__construct();
$this->middleware(function ($request, $response) {
// Middleware functionality
});
}
~~~
該`middleware()`方法要求有兩個參數的回調,`$request`提供所述[請求信息](https://octobercms.com/docs/services/request-input#request-information)和`$response`提供所述[響應對象](https://octobercms.com/docs/services/response-view#basic-responses)。回調應返回`$response`您的修改后的對象。
例如,要將`Test-Header`標題添加到響應中,可以執行以下操作:
~~~php
public function __construct()
{
parent::__construct();
$this->middleware(function ($request, $response) {
$response->headers->set('Test-Header', 'Test');
return $response;
});
}
~~~
您還可以使用`only()`和`except()`修飾符來控制將使用中間件的操作。例如,要限制中間件僅在`index`操作上運行,您可以執行以下操作:
~~~php
public function __construct()
{
parent::__construct();
$this->middleware(function ($request, $response) {
// Middleware functionality
})->only('index');
}
~~~
或者,對除操作之外的所有操作運行中間件`index`:
~~~php
public function __construct()
{
parent::__construct();
$this->middleware(function ($request, $response) {
// Middleware functionality
})->except('index');
}
~~~
- 基本說明
- 基本操作
- October cms 安裝
- 后臺控制器路徑
- 圖標
- 獲取安裝網上的插件/主題
- 插件構造器使用
- 定時任務
- October后臺控制器
- vscode編輯器
- ajax操作
- 使用
- ajax更新組件
- ajax屬性API
- JavaScript API
- ajax綜合使用
- 主題
- 多語言主題
- 安裝市場主題
- 主題程序處理
- 主題
- 頁面
- 部件
- 布局
- 內容
- 組件
- 媒體
- 主題表單操作
- 表單使用
- 表單后端程序處理
- 插件
- 自定義插件
- 插件說明
- 插件導航條
- 插件數據庫設置
- 插件的設置管理
- 插件的配置文件config
- 組件
- app服務
- app容器
- 擴展行為
- 緩存
- Collection類
- Lazy Collections
- Collection方法
- 助手函數
- 數組助手函數
- 路徑助手函數
- 玄樂助手函數
- 其他助手函數
- 錯誤與記錄
- 事件處理
- HTML頁面
- 文件與目錄操作
- 散列和加密
- 郵件
- 郵件內容
- 郵件發送
- 分頁
- 模板解析器
- 動態解析器語法
- 隊列消息
- 請求與輸入
- 響應
- 視圖
- 路由器
- 配置
- 驗證操作
- 處理錯誤消息
- 錯誤消息與視圖
- 可用的驗證規則
- 有條件的驗證規則
- 驗證數組
- 錯誤消息
- 自定義驗證規則
- 模型操作
- 定義模型與其屬性
- 檢索模型
- 插入與更新
- 刪除模型
- 查詢范圍
- 事件操作
- 關聯操作
- 定義關系
- 關系類型
- 多肽關系
- 關系查詢
- 渴望加載
- 插入模型
- 數據庫操作
- 基本用法
- 數據表結構
- 查詢連貫操作
- 結果檢索
- select子句
- 插入更新
- where子句
- 排序,分組,限制和偏移
- 文件附件
- Collection操作
- 屬性操作
- 系列化json
- 數據庫屬性
- 數據庫行為
- 控制器
- 后臺控制器定義
- 后臺頁面
- 后臺組件
- 后臺表單
- 表單組件
- 表單視圖
- 表單行為
- 后臺列表
- 列表行為
- 列表過濾器
- 可用列類型
- 關系行為
- 關系行為類型
- 擴展關系行為
- 列表排序操作
- 導入導出操作
- 用于與權限
- corlate模板修改
- 修改頂部導航
- laravel問題
- 控制器不存在
- 控制器
- 路由組
- laravel筆記
- laravel 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖