infotechnohelp / cakephp-core_advanced
CakePHP 3 插件
dev-master
2019-05-14 10:12 UTC
Requires
- cakephp/cakephp: 3.7.*
- infotechnohelp/cakephp-authentication_advanced: dev-master#ccc8de4b474e945d218a5d6db4397ea2ba3ca4d1
- infotechnohelp/cakephp-json-api_advanced: dev-master#9c9c6fc196f82b9d43199f4beb4d5c520efbce85
- vlucas/phpdotenv: ^2.4
Requires (Dev)
- doctrine/instantiator: 1.0.*
- phpunit/phpunit: ^5.7|^6.0
- squizlabs/php_codesniffer: ^3.2
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;