Phalcon 提供许多类来简化常见编码,如对文本或数组的操作, HTML 标签生成等等。
名称 | 描述 |
---|---|
插件类 | Phalcon\Mvc\User\Plugin |
组件类 | Phalcon\Mvc\User\Component |
模块类 | Phalcon\Mvc\User\Module |
逻辑类 | Phalcon\Mvc\User\Logic |
逻辑模型类 | Phalcon\Mvc\User\Logic\Model |
一般用于事件的拦截处理,例如权限检测插件 SecurityPlugin:
<?php
use Phalcon\Acl;
use Phalcon\Events\Event;
use Phalcon\Mvc\User\Plugin;
class SecurityPlugin extends Plugin
{
public function isAllowed($role, $controller, $action)
{
// ...
}
public function beforeExecuteRoute(Phalcon\Events\Event $event, Phalcon\Mvc\Dispatcher $dispatcher)
{
$auth = $this->session->get('auth');
if (!$auth) {
$role = 'Guests';
} else {
$role = 'Users';
}
$controller = $dispatcher->getControllerName();
$action = $dispatcher->getActionName();
$allowed = $this->isAllowed($role, $controller, $action);
if ($allowed != Acl::ALLOW) {
$this->flash->error("You don't have access to this module");
$dispatcher->forward(
array(
'controller' => 'index',
'action' => 'index'
)
);
return false;
}
}
}
<?php
$di->set('dispatcher', function () {
$eventsManager = new EventsManager();
$eventsManager->attach('dispatch:beforeExecuteRoute', new SecurityPlugin);
$dispatcher = new Dispatcher();
$dispatcher->setEventsManager($eventsManager);
return $dispatcher;
});
一般用于对框架功能的扩展。
一般用于对框架功能的扩展。
一般用于处理业务逻辑,可以设置调度器绑定逻辑类,会根据控制器方法参数自动调用逻辑类静态方法 call 完成实例化,然后调用 start 完成初始化操作, 当控制器方法执行结束后,将调用 finish 方法:
<?php
$di->set('dispatcher', function () {
$dispatcher = new Dispatcher();
$dispatcher->setLogicBinding(true);
return $dispatcher;
});
控制器实现:
<?php
class LogicController extends Phalcon\Mvc\Controller
{
public function indexAction(\MyLogic $logic)
{
// ...
}
}
逻辑类实现:
<?php
class MyLogic extends Phalcon\Mvc\User\Logic
{
public $num = 0;
public function start()
{
// ...
}
public function finish()
{
// ...
$this->view->data = $this->getContent();
}
// 该方法可以不实现
public static function call($action = NULL, $params = NULL)
{
$logic = new MyLogic($action, $params);
$logic->num = 1;
return $logic;
}
}
使用方式与逻辑类相同,比逻辑类多了几个预设的抽象方法,示例如下:
class Mylogic extends Phalcon\Mvc\User\Logic\Model {
public function get($arguments = NULL){}
public function getAll($arguments = NULL){}
public function save($arguments = NULL){}
public function create($arguments = NULL){}
public function delete($arguments = NULL){}
public function deleteAll($arguments = NULL){}
public function update($arguments = NULL){}
public function updateAll($arguments = NULL){}
public function count($arguments = NULL){}
}