国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Phalcon控制器

Miyang / 2004人閱讀

摘要:控制器使用控制器是控制器中用于處理請(qǐng)求的方法??刂破髅Q以結(jié)尾,名稱以結(jié)尾??刂破魅绻^承基類,便可以訪問應(yīng)用中的各種服務(wù)。初始化控制器提供了方法,它在所有方法被執(zhí)行前執(zhí)行,不建議使用構(gòu)造方法。

Phalcon 控制器 使用控制器(Using Controllers)

Actions是控制器中用于處理請(qǐng)求的方法。默認(rèn)情況下,控制器中所有公共方法都映射到Actions,能夠通過URL訪問。Actions負(fù)責(zé)解釋請(qǐng)求并創(chuàng)建響應(yīng),響應(yīng)通常以視圖形式呈現(xiàn),或通過其他方式創(chuàng)建。

當(dāng)訪問類似http://localhost/blog/posts/show/2015/the-post-titleURL時(shí),Phalcon會(huì)像下面這樣解析URL的各個(gè)部分:

Phalcon目錄 blog
控制器 posts
方法 show
參數(shù) 2015
參數(shù) the-post-title

這種情況下,控制器PostsController將負(fù)責(zé)處理該請(qǐng)求??刂破骺梢酝ㄟ^PhalconLoader加載,因此控制器存放在應(yīng)用中什么地方,并沒有強(qiáng)制要求,可以根據(jù)需求自由的組織控制器。

控制器名稱以Controller結(jié)尾,Actions名稱以Action結(jié)尾。


額外的URI參數(shù)被定義為Action的參數(shù),可以通過局部變量訪問它們??刂破魅绻^承基類PhalconMvcController,便可以訪問應(yīng)用中的各種服務(wù)。

沒有默認(rèn)值的參數(shù)被視為必選參數(shù),可以像PHP那樣為參數(shù)設(shè)定默認(rèn)值:


參數(shù)按照它們?cè)诼酚芍袀鬟f的順序進(jìn)行分配,可以通過參數(shù)名稱獲取任意參數(shù):

dispatcher->getParam("year");
        $postTitle = $this->dispatcher->getParam("postTitle");
    }
}
調(diào)度循環(huán)(Dispatch Loop)

調(diào)度循環(huán)在調(diào)度器中運(yùn)行,直到?jīng)]有剩余操作需要執(zhí)行。上例中,只有一個(gè)動(dòng)作被執(zhí)行。forward()方法在調(diào)度循環(huán)中提供更復(fù)雜的操作流,可以將操作轉(zhuǎn)發(fā)給其他控制器 / 方法。

flash->error(
            "You don"t have permission to access this area"
        );

        // 轉(zhuǎn)發(fā)給另一個(gè)方法
        $this->dispatcher->forward(
            [
                "controller" => "users",
                "action"     => "signin",
            ]
        );
    }
}

如果用戶沒有訪問某個(gè)方法的權(quán)限,則將用戶轉(zhuǎn)發(fā)到UsersController控制器的signin方法。


初始化控制器(Initializing Controllers)

PhalconMvcController提供了initialize()方法,它在所有方法被執(zhí)行前執(zhí)行,不建議使用構(gòu)造方法__construct()

settings = [
            "mySetting" => "value",
        ];
    }

    public function saveAction()
    {
        if ($this->settings["mySetting"] === "value") {
            // ...
        }
    }
}

只有當(dāng)beforeExecuteRoute事件成功執(zhí)行時(shí),initialize()方法才被調(diào)用,避免了初始化方法中的應(yīng)用邏輯無法在未授權(quán)的情況下執(zhí)行。

如果想在構(gòu)造控制器對(duì)象之后執(zhí)行初始化邏輯,可以實(shí)現(xiàn)onConstruct()方法:


注意,即使被調(diào)用的方法不存在于控制器中,或者用戶無權(quán)訪問(根據(jù)開發(fā)者定義的權(quán)限控制)該方法,onConstruct()方法仍會(huì)被執(zhí)行。

注入服務(wù)(Injecting Services)

繼承了PhalconMvcController的控制器,可以訪問應(yīng)用中的服務(wù)容器。例如,如果注冊(cè)了這樣的服務(wù):

set(
    "storage",
    function () {
        return new Storage(
            "/some/directory"
        );
    },
    true
);

可以通過多種方式訪問該服務(wù):

storage->save("/some/file");

        // 從DI中訪問服務(wù)
        $this->di->get("storage")->save("/some/file");

        // 使用魔術(shù)方法getter
        $this->di->getStorage()->save("/some/file");
        $this->getDi()->getStorage()->save("/some/file");

        // 使用數(shù)組語法
        $this->di["storage"]->save("/some/file");
    }
}
請(qǐng)求和響應(yīng)(Request and Response)

假設(shè)框架預(yù)先注冊(cè)好了服務(wù)。request服務(wù)包含一個(gè)PhalocnHttpRequest實(shí)例,response服務(wù)包含一個(gè)PhalconHttpResponse實(shí)例,表示將要發(fā)送給客戶端的內(nèi)容。

request->isPost()) {
            // 獲取POST數(shù)據(jù)
            $customerName = $this->request->getPost("name");
            $customerBorn = $this->request->getPost("born");
        }
    }
}

響應(yīng)對(duì)象通常不是直接被使用,而是在方法執(zhí)行前構(gòu)建。有時(shí),比如afterDispatch事件中,直接訪問響應(yīng)對(duì)象很有用:

response->setStatusCode(404, "Not Found");
    }
}
Session數(shù)據(jù)(Session Data)

Session能夠在請(qǐng)求之間維持持久的數(shù)據(jù),可以從任何控制器中訪問PhalconSessionBag來封裝需要持久化的數(shù)據(jù):

persistent->name = "Micheal";
    }

    public function welcomeAction()
    {
        echo "Welcome, ", $this->persistent->name;
    }
}
服務(wù)充當(dāng)控制器(Using Services as Controller)

服務(wù)可以充當(dāng)控制器,控制器總是從服務(wù)容器中請(qǐng)求。因此,以類名稱注冊(cè)的任何服務(wù),都可以充當(dāng)控制器角色:

set(
    "IndexController",
    function () {
        $component = new Component();

        return $component;
    }
);

// 帶命名空間的控制器
$di->set(
    "BackendControllersIndexController",
    function () {
        $component = new Component();

        return $component;
    }
);
控制器事件(Events in Controllers)

控制器自動(dòng)監(jiān)聽調(diào)度事件,實(shí)現(xiàn)與事件名稱同名的方法,可以在操作執(zhí)行之前 / 之后實(shí)現(xiàn)鉤子:

getActionName() === "save") {
            $this->flash->error(
                "You don"t have permission to save posts"
            );

            $this->dispatcher->forward(
                [
                    "controller" => "home",
                    "action"     => "index",
                ]
            );
        }
    }

    public function afterExecuteRoute($dispatcher)
    {
        // 在所有動(dòng)作之后執(zhí)行
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29659.html

相關(guān)文章

  • Phalcon入門教程之目錄結(jié)構(gòu)

    摘要:原文發(fā)表于入門教程之目錄結(jié)構(gòu)很多初學(xué)的朋友,對(duì)于以框架為基礎(chǔ)構(gòu)建的項(xiàng)目,應(yīng)該如何組織目錄結(jié)構(gòu)有點(diǎn)摸不著頭腦。只需要通過注冊(cè)這些目錄結(jié)構(gòu),即可正常使用。 原文發(fā)表于:Phalcon入門教程之目錄結(jié)構(gòu) 很多初學(xué)Phalcon的朋友,對(duì)于以Phalcon框架為基礎(chǔ)構(gòu)建的項(xiàng)目,應(yīng)該如何組織目錄結(jié)構(gòu)有點(diǎn)摸不著頭腦。比如多模塊的項(xiàng)目中,如何共用libs類庫和models目錄中模型類的情況,就有很...

    reclay 評(píng)論0 收藏0
  • PHP-Phalcon框架中的數(shù)據(jù)庫操作

    摘要:本文描述了框架中數(shù)據(jù)庫操作方法,主要討論框架的組件中的操作方法。屬性方法在框架中支持屬性的擴(kuò)展查詢,在上例中,可以把條件語句改為同時(shí)省略查詢條件結(jié)果不變。 本文描述了PHP-Phalcon框架中數(shù)據(jù)庫操作方法,主要討論P(yáng)halcon框架的Model組件中的操作方法。更詳細(xì)的Model介紹請(qǐng)參考:官方文檔 1. 連接數(shù)據(jù)庫 在Phalcon框架中,通過在DI中注入db參數(shù)來實(shí)現(xiàn)數(shù)據(jù)庫的...

    xiaotianyi 評(píng)論0 收藏0
  • PHP框架Phalcon 之 ACL

    摘要:一般至少要在執(zhí)行路由前要判斷用戶是否具有權(quán)限一般在中,所以應(yīng)該在它之前獲得填充。以下代碼可參考這里的方法就是重點(diǎn)。參考這里把對(duì)象保存在中。 showImg(https://segmentfault.com/img/bVkdih); 使用如下圖解釋這個(gè)組件: showImg(https://segmentfault.com/img/bVkdii); 實(shí)際最終真正要使用的是access_l...

    mikyou 評(píng)論0 收藏0
  • 后端開發(fā)者從零做一個(gè)移動(dòng)應(yīng)用(后端篇)

    摘要:后端開發(fā)的疑惑后端開發(fā)最常面對(duì)的一個(gè)問題性能高并發(fā)等等。而到了時(shí)代,在方面有了前后端分離概念移動(dòng)后端更是無力渲染天然前后端分離。 先來上一張前端頁面的效果圖(Vue + Vux + Vuex + Vue-Router)。showImg(https://segmentfault.com/img/remote/1460000010207850); 第一次做gif 沒什么經(jīng)驗(yàn),太大了。加載...

    codergarden 評(píng)論0 收藏0
  • Phalcon填坑手冊(cè):開發(fā)中會(huì)遇到的問題和解決方案(不斷更新)

    本文將記錄我在Phalcon開發(fā)過程中遇到的問題,以及如何如何解決。 本文首發(fā)在我的博客,我更新之后會(huì)更新過來;如果想查看最新的,可以到我的博客:Phalcon填坑手冊(cè):開發(fā)中會(huì)遇到的問題和解決方案(不斷更新) 1. 正確地在控制器中獲取參數(shù) 一般情況下,GET/POST請(qǐng)求獲取參數(shù): $this->request->get(參數(shù)名); $this->request->getPost(參數(shù)名) 路...

    sf190404 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<