infotechnohelp/cakephp-core_advanced

CakePHP 3 插件

安装: 16

依赖: 0

建议: 0

安全性: 0

星标: 0

分支: 0

类型:cakephp-plugin

dev-master 2019-05-14 10:12 UTC

This package is auto-updated.

Last update: 2024-09-14 21:54:38 UTC


README

结构

src/Controller/AppController 扩展结构

Core ← DefaultSkeleton ← Skeleton ← App ← Core\Api ← DefaultSkeleton@Api ← Skeleton@Api ← App@Api

src/Template/Layout/default.ctp 扩展结构

Core ← DefaultSkeleton ← Skeleton ← App

实现

1. 添加插件

src/Application.php → bootstrap()

$this->addPlugin('Infotechnohelp/Core', ['bootstrap' => true, routes' => true]);

路由

config/routes.php

Router::defaultRouteClass(DashedRoute::class);

Configure::write('Infotechnohelp.Routes.Connected', ['app' => function (RouteBuilder $routes) {

    $routes->connect('/', ['controller' => 'Home', 'action' => 'index', 'home']);
    ...

}]);

CSRF

实现 HTML 表单

src/Template/*/action.ctp

CakePHP 表单助手
echo $this->Form->create().
$this->Form->control('name').
$this->Form->submit('Submit', ['class' => 'class1 class2']).
$this->Form->end();    
纯 HTML 表单

src/Controller/*Controller.php

public function action(){
    $this->set('csrfToken', $this->getRequest()->getParam('_csrfToken'));
}

src/Template/*/action.ctp

<form action="" method="post">
    <input type="hidden" name="_csrfToken" autocomplete="off" value="<?= $csrfToken ?>"/>
    <input name="name">
    <button type="submit">Submit</button>
</form>

在 AJAX 调用中实现

src/Template/Layout/default.ctp 或任何其他 .ctp

jQuery

POST 数据参数 _csrfToken

var csrfToken = <?= $this->request->getParam('_csrfToken'); ?>;

$.ajax({
         method: 'POST',
         data: {
            _csrfToken: csrfToken 
         },
         ...
});

头部

var csrfToken = <?= $this->request->getParam('_csrfToken'); ?>;

$.ajax({
         beforeSend: function (xhr) {
             xhr.setRequestHeader('X-CSRF-Token', csrfToken);
         },
         ...
});

JsonApi 实现

添加配置

Api/...Controller.php

请求处理组件应该被加载

$this->loadComponent('RequestHandler');

config/infotechnohelp.json-api.yml

pathPrefixes:
- api
- auth-api (automatically later)

设置 ErrorHandlerMiddleware (JSON 响应结构)

src/Application.php 中手动替换

use Cake\Error\Middleware\ErrorHandlerMiddleware;use Infotechnohelp\JsonApi\Middleware\ErrorHandlerMiddleware;

身份验证实现