【问题标题】:cakephp3 - plugin class Table not loadcakephp3 - 插件类表未加载
【发布时间】:2015-04-23 13:29:32
【问题描述】:

我用 cakephp3 制作了一个插件博客。 当我调用 url /blog/edit/3 时,一切都很好,表单输入已填满。

我有一个类\Blog\Model\Table\ArticlesTable(文件位置:ROOT/plugins/Blog/src/Model/Table/ArticlesTable.php)

这里是类:

<?php
namespace Blog\Model\Table;

use \Cake\ORM\Table;
use \Cake\Validation\Validator;

class ArticlesTable extends Table
{
  public function initialize(array $config)
  {
    //die('IN ArticlesTable::initialize');
    $this->table('articles');
    $this->primaryKey('id');
    $this->addBehavior('Timestamp');
  }

  public function validationDefault(Validator $validator)
  {
  ...
  }
}

在调试器中,我看到了消息:

生成的模型

以下 Table 对象使用 Cake\ORM\Table 而不是具体的 类:文章

  • 我检查命名空间和文件的大小写
  • 我运行命令 composer dumpautoloader

但是我的课程没有加载

有人知道我的问题吗?

谢谢

菲尔

【问题讨论】:

  • 我猜你不应该使用use \Cake\ORM\Table;,而应该使用use Cake\ORM\Table;。我的意思是,删除第一个斜线。我会推荐你​​使用 bake 来生成基本代码。
  • 我删除 Blog/src/Model/Entity/Article.phpBlog/Model/Entity/Article.php 并运行命令:bin\cake.bat bake model Articles -p Blog 文件已创建,但问题仍然存在:以下 Table 对象使用 Cake\ORM\Table 而不是具体的类:文章
  • 具体的表实例是在哪里以及如何创建的?
  • 在文件夹/plugins/Blog/src/Model/Table/中,文件名为ArticlesTable.php

标签: cakephp-3.0


【解决方案1】:

我解决了这个问题。加载模型时需要指定插件命名空间:

$this->loadModel('Namespace.TableName');

在我的例子中我改变了:

class BlogController extends AppController
{
  public function initialize()
  {
    parent::initialize();
    $this->loadModel('Articles');//<----- HERE
  }
...
}

class BlogController extends AppController
{
  public function initialize()
  {
    parent::initialize();
    $this->loadModel('Blog.Articles'); //<----- HERE
  }
...
}

【讨论】:

    【解决方案2】:

    src/Model/Table 文件夹中创建ArticlesTable 类。最简单的方法是使用 bake 命令

    bin/cake bake model Articles
    

    【讨论】:

    • 我运行命令,文件 \plugins\Blog\src\Model\Table\ArticlesTable.php, \plugins\Blog\src\Model\Entity\ Article.php 已创建,但未加载这些文件。我在Windows上是这个原因吗?!有缓存要清理吗?
    • 在我的 /config/bootstrap.php 中,我有 Plugin::loadAll( 'Blog' =&gt; ['routes' =&gt; true, 'autoload' =&gt; true, ]); 在 /composer.json "autoload": { "psr-4": { "App\\": "src", "Blog\\": "./plugins/Blog/src" } }, 但问题仍然存在于 $this->loadModel('Blog.文章'); 评论所以自动加载不起作用
    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多