小编Oop*_*'oh的帖子

在CakePHP项目中设置React

如何使用webpack在CakePHP webroot中设置React?

我有一个现有的CakePHP项目(使用Model,View,Controller).我想在其webroot()中设置迷你React项目.将对控制器中定义的api进行ajax调用.Project/Miniproject/index.htmlindex.html

- Project
| - app
| | - Controller
| | - View
| | - Model
| | - webroot
| | | - Miniproject
| | | | - index.html [Mini react project]
Run Code Online (Sandbox Code Playgroud)

我已经尝试安装React Transform Boilerplate.但它使用web dev服务器(并在localhost:3000上呈现文件).但我想要从运行CakePHP项目的nginx服务器渲染的文件.

当我访问url(Project/Miniproject/index.html)时,它找不到,dist/bundle.js因为它在内存中.那么如何使用webpack在CakePHP webroot中设置React?

cakephp nginx reactjs

8
推荐指数
1
解决办法
1732
查看次数

在CakePHP3中混淆验证与应用程序规则

关于验证的多个问题可能属于一起,因为它们都是在CakePHP 3中解决新的验证概念.

我已阅读的章节(1,2,3的食谱多次),但老实说,我不明白怎么做的正确方法.我也知道GitHub目前有一个关于CakePHP3验证的问题/讨论可能涉及同一主题.

例如使用patchEntity触发验证错误.所以我认为在执行保存操作之前始终检查/显示错误会更好:

// src/Controller/UsersController.php
public function add() {
  $user = $this->Users->newEntity();
  if ($this->request->is('post')) {
    $user = $this->Users->patchEntity($user, $this->request->data, ['validate' => 'default'] );
    if ( $user->errors() ) {
      $this->Flash->error('There was a Entity validation error.');
    } else {
      // Optional: Manipulate Entity here, e.g. add some automatic values
      // Be aware: Entity content will not be validated again by default
      if ( $this->Users->save($user) ) {
        $this->Flash->succeed('Saved successfully.');
        return $this->redirect(['controller' => …
Run Code Online (Sandbox Code Playgroud)

validation cakephp-3.0 cakephp-3.1 cakephp-3.x

7
推荐指数
1
解决办法
2268
查看次数

如何在 CakePHP 3 中使用电子邮件传输类“调试”

如何使用 CakePHP 3 中的电子邮件传输类“调试”查看结果(最终邮件)?或者哪里可以找到返回的结果?书中没有关于电子邮件调试的详细信息。

里面config/app.php

// Each transport needs a `className`. Valid options are as follows:
// - Mail  : Send using PHP mail function
// - Smtp  : Send using SMTP
// - Debug : Do not send the email, just return the result
Run Code Online (Sandbox Code Playgroud)

所以我设置

'EmailTransport' => [
  'default' => [
    'className' => 'Debug',
  ],
],
Run Code Online (Sandbox Code Playgroud)

在测试控制器中:

namespace App\Controller;
use App\Controller\AppController;
use Cake\Event\Event;
use Cake\Network\Exception\NotFoundException;
use Cake\Mailer\Email;

class TestsController extends AppController {
  public …
Run Code Online (Sandbox Code Playgroud)

cakephp-3.0

5
推荐指数
1
解决办法
5047
查看次数

在CakePHP 3.x中保存HasMany关联数据

我有两张桌子.我的主要表是学生.我的次要表是考试.我正在尝试使用hasManybelongsToMany Association 保存这两个表.但它仅在学生表中保存数据,而不是在考试中保存.任何人都可以帮我解决这个问题.

学生型号:

class StudentsTable extends Table {
  public function initialize(array $config) {
    $this->addBehavior('Timestamp');
    parent::initialize($config);
    $this->table('students');
    $this->primaryKey(['id']);
    $this->hasMany('Exams', [
      'className' => 'Exams',
      'foreignKey' => 'student_id',
      'dependent'=>'true',
      'cascadeCallbacks'=>'true']);
  }
}
Run Code Online (Sandbox Code Playgroud)

考试模型:

class ExamsTable extends Table {
  public function initialize(array $config) {
    parent::initialize($config);
    $this->table('exams');
    $this->primaryKey(['id']);
    $this->belongsToMany('Students',[
      'className'=>'Students',
      'foreignKey' => 'subject_id',
      'dependent'=>'true',
      'cascadeCallbacks'=>'true']);
  }
}
Run Code Online (Sandbox Code Playgroud)

我的school.ctp:

echo $this->Form->create();
echo $this->Form->input('name');
echo $this->Form->input('exams.subject', array(
  'required'=>false,
  'multiple' => 'checkbox',
  'options' => array(
    0 …
Run Code Online (Sandbox Code Playgroud)

php mysql orm associations cakephp-3.0

5
推荐指数
1
解决办法
703
查看次数

CakePHP 3:更改结果集的结构

我是CakePHP的新手,有以下问题:

我有"图像","关键字"和"KeywordCategories"表.每个图像都可以有许多关键字(多对多),每个关键字都有一个类别(多对一).使用检索图像列表

$images = $this->Images->find()->contain(['Keywords',  'Keywords.KeywordCategories']);
Run Code Online (Sandbox Code Playgroud)

返回如下结果结构:

[
   {
      "id":1,
      "keywords":[
         {
            "keyword":"Dog",
            "keyword_category":{
               "title":"Animal"
            }
         },
         {
            "keyword":"Cat",
            "keyword_category":{
               "title":"Animal"
            }
         },
         {
            "keyword":"Black",
            "keyword_category":{
               "title":"Color"
            }
         }
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

这没关系,但我想在这样的结构中按关键字类别对关键字进行分组:

[
   {
      "id":1,
      "keyword_categories":[
         {
            "title":"Animal",
            "keywords":[
               {
                  "keyword":"Dog"
               },
               {
                  "keyword":"Cat"
               }
            ]
         },
         {
            "title":"Color",
            "keywords":[
               {
                  "keyword":"Black"
               }
            ]
         }
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

知道如何通过CakePHP查询实现这一目标吗?

php cakephp cakephp-3.x

4
推荐指数
1
解决办法
1081
查看次数

检查视图模板中是否存在对象或为空

如果结果对象包含任何条目,如何在视图模板中检查?

(已经有类似的问题,但这个问题略有不同)

CakePHP 3博客教程为例.他们展示了如何在一个页面上列出所有文章:

// src/Controller/ArticlesController.php
public function index() {
  $this->set('articles', $this->Articles->find('all'));
}
Run Code Online (Sandbox Code Playgroud)

和视图模板:

<!-- File: src/Template/Articles/index.ctp -->
<table>
  <tr>
    <th>Id</th>
    <th>Title</th>
  </tr>
<?php foreach ($articles as $article): ?>
  <tr>
    <td><?= $article->id ?></td>
    <td>
      <?= $this->Html->link($article->title, ['action' => 'view', $article->id]) ?>
    </td>
</tr>
<?php endforeach; ?>
</table>
Run Code Online (Sandbox Code Playgroud)

缺点:如果数据库中没有条目,则仍会呈现HTML表.

如何防止这种情况并显示一条简单的消息,例如"抱歉没有结果"的内容?

CakePHP 2我用过

if ( !empty($articles['0']['id']) ) {
  // result table and foreach here
} else {
  echo '<p>Sorry no …
Run Code Online (Sandbox Code Playgroud)

cakephp-3.0 cakephp-3.x

3
推荐指数
1
解决办法
7816
查看次数

CakePHP 3:未启用 DebugKit

DebugKit使用以下方法下载了插件:

php composer.phar require --dev cakephp/debug_kit "~3.0"
Run Code Online (Sandbox Code Playgroud)

但它仍然显示警告error.log并且DebugKit不起作用:

警告:未启用 DebugKit。您需要安装 pdo_sqlite,或定义“debug_kit”连接名称

那么如何定义debug_kit连接名称app.php以及如何启用调试工具包??

debugging cakephp-3.0

3
推荐指数
1
解决办法
7790
查看次数

嵌套列表导航:屏幕阅读器支持列表标签和嵌套级别

使用屏幕阅读器用户<nav>的嵌套<ul>列表增强网站地标的语义可访问性的最佳做法是什么?(aria-label 和 list level 目前并非所有屏幕阅读器都能发音)

我在 iOS 9 上使用 Voiceover、Android 5 上的 Talkback 和 Win10(在 Firefox 中)上的 NVDA 2016-1 进行了测试。我在屏幕阅读器应用程序中使用了(大部分)默认设置。

我认为以下列表应该是为屏幕阅读器用户准备的最佳选择:

演示代码 1

<nav>
  <ul aria-label="product navigation">
    <li><a href="product-a.html">Product A</a>
      <ul aria-label="sub menu Product A">
        <li><a href="product-a-spec.html">Specifications</a></li>
        <li><a href="product-a-acce.html">Accessories</a></li>
      </ul>
    </li>
    <li><a href="product-b.html">Product B</a>
      <ul aria-label="sub menu Product B">
        <li><a href="product-b-spec.html">Specifications</a></li>
        <li><a href="product-b-acce.html">Accessories</a></li>
      </ul>
    </li>
  </ul>
</nav>
Run Code Online (Sandbox Code Playgroud)

预期结果:屏幕阅读器这样说:

  • 导航地标的起点
  • 具有两个元素的开始列表级别 1 “产品导航”
  • “产品 A”链接
  • 具有两个元素的起始列表级别 2 “子菜单产品 A”
  • “规格”链接
  • “附件”链接 …

html accessibility screen-readers nested-lists wai-aria

3
推荐指数
1
解决办法
5048
查看次数

beforeMarshal在验证失败时不修改请求数据

错误还是功能?如果我更改了请求数据beforeMarshal并且存在验证错误,则不会返回修改请求数据.

这个问题可能与如何在验证NotEmpty之前使用Trim()有关?.

在构建实体之前修改请求数据 如果需要在将请求数据转换为实体之前对其进行修改,则可以使用Model.beforeMarshal事件.此事件允许您在创建实体之前操作请求数据.来源:CakePHP 3文档

根据该书,无论是否存在验证错误,我都希望请求数据始终更改.

示例或测试用例:

// /src/Model/Table/UsersTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
// Required for beforeMarshal event:
use Cake\Event\Event;
use ArrayObject;
// Required for Validation:
use Cake\Validation\Validator;

class UsersTable extends Table {

  public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options) {
    $data['firstname'] = trim($data['firstname']);
  }

  public function validationDefault(Validator $validator) {
    $validator
      ->add('firstname', [
        'minLength'   => [ 'rule' => ['minLength', 2], 'message' => 'Too short.' ],
      ])
      ;
    return $validator;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我输入"d"(Space-d),则会显示验证错误,但空格本身不会在表单中删除.我会表示只显示"d"的表单,因为使用beforeMarshal事件从请求数据中删除了空格.那么......错误还是功能?

我的解决方案是在控制器中使用trim() - …

cakephp-3.0

2
推荐指数
1
解决办法
2729
查看次数

CakePHP 3.0:响应为json

我正在创建一个CakePHP 3.0 REST API.我按照这个说明(书中的路由)并在json中收到了回复.这是我的代码.

01 src/config/rout.php

Router::extensions('json');
Run Code Online (Sandbox Code Playgroud)

02 src/controler/UsersController.php

  public function view($id = null) {
    $data = array('status' => 'o','status_message' => 'ok' );
    $this->set('data', $data);
    $this->set('_serialize', 'data');  
}
Run Code Online (Sandbox Code Playgroud)

03发送一个帖子请求到这个URL

http://domain.com/users/view.json

输出:

{
    "status": "o",
    "status_message": "ok"
}
Run Code Online (Sandbox Code Playgroud)

但是我想把json放在没有.json扩展名的情况下.先感谢您.

php json cakephp url-routing cakephp-3.x

2
推荐指数
1
解决办法
5685
查看次数