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

資訊專欄INFORMATION COLUMN

Phalcon控制器

Miyang / 2015人閱讀

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

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

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

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

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

這種情況下,控制器PostsController將負(fù)責(zé)處理該請求。控制器可以通過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ù)按照它們在路由中傳遞的順序進(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í)行。上例中,只有一個動作被執(zhí)行。forward()方法在調(diào)度循環(huán)中提供更復(fù)雜的操作流,可以將操作轉(zhuǎn)發(fā)給其他控制器 / 方法。

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

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

如果用戶沒有訪問某個方法的權(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í)行時,initialize()方法才被調(diào)用,避免了初始化方法中的應(yīng)用邏輯無法在未授權(quán)的情況下執(zhí)行。

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


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

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

繼承了PhalconMvcController的控制器,可以訪問應(yīng)用中的服務(wù)容器。例如,如果注冊了這樣的服務(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");
    }
}
請求和響應(yīng)(Request and Response)

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

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

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

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

Session能夠在請求之間維持持久的數(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ù)容器中請求。因此,以類名稱注冊的任何服務(wù),都可以充當(dāng)控制器角色:

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

        return $component;
    }
);

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

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

控制器自動監(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)
    {
        // 在所有動作之后執(zhí)行
    }
}

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

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

相關(guān)文章

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

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

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

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

    xiaotianyi 評論0 收藏0
  • PHP框架Phalcon 之 ACL

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

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

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

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

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

    sf190404 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<