【问题标题】:Setting up first schema.yml for Symfony 1.4为 Symfony 1.4 设置第一个 schema.yml
【发布时间】:2012-02-11 01:13:12
【问题描述】:

我正在尝试设置 Symfony 1.4。我对 MVC 并不陌生,但这是我第一次尝试 Symfony。我一直在关注 symfony-project.org/reference/1_4 上的文档,我有一个“Hello,World!”页。

我继续下一步——数据库。

我这样做了(别担心。仅限本地主机 :)):

./symfony configure:database "mysql:host=localhost;dbname=myblog" myblog myblog

然后我把它放在我的 config/doctrine/schema.yml 文件中:

Article:
  actAs: [Sluggable, Timestampable]
  columns:
    title:
      type: string(255)
      notnull: true
    content:
      type: clob
    status: string(255)
    author_id: integer
    category_id: integer
    published_at: timestamp
  relations:
    Author:
      foreignAlias: Articles
    Category:
      foreignAlias: Articles
    Tags:
      class: Tag
      refClass: ArticleTag
      foreignAlias: Articles
Author:
  columns:
    first_name: string(20)
    last_name: string(20)
    email: string(255)
    active: boolean
Category:
  columns:
    name: string(255)
Tag:
  columns:
    name: string(255)
ArticleTag:
  columns:
    article_id:
      type: integer
      primary: true
    tag_id:
      type: integer
      primary: true
  relations:
    Article:
      onDelete: CASCADE
    Tag:
      onDelete: CASCADE

但我明白了:

charlie@mystery:~/sfproject$ ./symfony doctrine:build --all-classes
>> doctrine  generating model classes
>> file+     /tmp/doctrine_schema_30022.yml
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseArticleTag.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseCategory.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseArticle.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseAuthor.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseTag.class.php
>> autoload  Resetting application autoloaders
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_autoload.yml.php
>> doctrine  generating form classes
PHP Fatal error:  Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25

Fatal error: Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25
PHP Fatal error:  Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239

Fatal error: Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239

我为我的 schema.ywl 尝试了几个不同的示例文件,所以我认为它没有缺陷。我一定是错过了一步。

有些事情不对劲,但我完全被难住了。任何帮助将不胜感激!

编辑 我原来的 config/doctrine/schema.yml 是:

Posts:
  actAs:
    Timestampable: ~
    columns:
      title: string(255)
      body: clob

编辑 2 根据 Mike 的要求,我将文件编辑为:

Article:
  actAs: { Timestampable: ~ }
  columns:
    title:
      type: string(255)
      notnull: true
    content:
      type: clob
    status: string(255)
    author_id: integer
    category_id: integer
    published_at: timestamp
  relations:
    Author:
      foreignAlias: Articles
    Category:
      foreignAlias: Articles
    Tags:
      class: Tag
      refClass: ArticleTag
      foreignAlias: Articles
Author:
  columns:
    first_name: string(20)
    last_name: string(20)
    email: string(255)
    active: boolean
Category:
  columns:
    name: string(255)
Tag:
  columns:
    name: string(255)
ArticleTag:
  columns:
    article_id:
      type: integer
      primary: true
    tag_id:
      type: integer
      primary: true
  relations:
    Article:
      onDelete: CASCADE
    Tag:
      onDelete: CASCADE

错误是:

charlie@mystery:~/sfproject$ ./symfony doctrine:build --all-classes
>> doctrine  generating model classes
>> file+     /tmp/doctrine_schema_79366.yml
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseArticleTag.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BasePosts.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseCategory.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseArticle.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseAuthor.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseTag.class.php
>> autoload  Resetting application autoloaders
>> doctrine  generating form classes
PHP Fatal error:  Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25

Fatal error: Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25
PHP Fatal error:  Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239

Fatal error: Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239
charlie@mystery:~/sfproject$ 

编辑 对于迈克的手动构建建议,我在教义:build-filters 和教义:build-forms 上遇到同样的错误:

charlie@mystery:~/sfproject$ php symfony doctrine:build-model
>> doctrine  generating model classes
>> file+     /tmp/doctrine_schema_91741.yml
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseArticleTag.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BasePosts.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseCategory.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseArticle.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseAuthor.class.php
>> tokens    /home/charlie/sfproject/lib/model/doctrine/base/BaseTag.class.php
>> autoload  Resetting application autoloaders
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_autoload.yml.php
charlie@mystery:~/sfproject$ php symfony doctrine:build-filters
>> doctrine  generating filter form classes
PHP Fatal error:  Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25

Fatal error: Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25
PHP Fatal error:  Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239

Fatal error: Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239
charlie@mystery:~/sfproject$ php symfony doctrine:build-forms
>> doctrine  generating form classes
PHP Fatal error:  Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25

Fatal error: Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25
PHP Fatal error:  Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239

Fatal error: Call to a member function evictAll() on a non-object in /home/charlie/sfproject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239
charlie@mystery:~/sfproject$ php symfony cc
>> cache     Clearing cache type "all" for "frontend" app and "test" env
>> file+     /home/charlie/sfproject/data/frontend_test-cli.lck
>> chmod 777 /home/charlie/sfproject/data/frontend_test-cli.lck
>> file-     /home/charlie/sfproject/cache/frontend/test/config/config_config_handlers.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/test/config/config_app.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/test/config/config_settings.yml.php
>> file-     /home/charlie/sfproject/data/frontend_test-cli.lck
>> cache     Clearing cache type "all" for "frontend" app and "dev" env
>> file+     /home/charlie/sfproject/data/frontend_dev-cli.lck
>> chmod 777 /home/charlie/sfproject/data/frontend_dev-cli.lck
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_autoload.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_config_handlers.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_databases.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_app.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/dev/config/config_settings.yml.php
>> file-     /home/charlie/sfproject/data/frontend_dev-cli.lck
>> cache     Clearing cache type "all" for "frontend" app and "prod" env
>> file+     /home/charlie/sfproject/data/frontend_prod-cli.lck
>> chmod 777 /home/charlie/sfproject/data/frontend_prod-cli.lck
>> file-     /home/charlie/sfproject/cache/frontend/prod/config/config_config_handlers.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/prod/config/config_app.yml.php
>> file-     /home/charlie/sfproject/cache/frontend/prod/config/config_settings.yml.php
>> file-     /home/charlie/sfproject/data/frontend_prod-cli.lck
charlie@mystery:~/sfproject$ 

【问题讨论】:

  • 你能弄明白吗?

标签: php mysql symfony1 symfony-1.4


【解决方案1】:

您的新架构看起来不错,但您的原始架构很糟糕。

这个:

Posts:
  actAs:
    Timestampable: ~
    columns:
      title: string(255)
      body: clob

应该是:

Posts:
  actAs:
    Timestampable: ~
  columns:
    title: string(255)
    body: clob

在之前的 sn-p 中,columns 与 actAs 处于同一级别,这就是为什么它在尝试创建“columns”类时感到窒息的原因。

-- 编辑--

尝试手动运行构建(如果使用 propel,应该能够用 propel 换掉教义):

php symfony doctrine:build-model
php symfony doctrine:build-filters
php symfony doctrine:build-forms
php symfony cc

【讨论】:

  • 谢谢,迈克。我不认为这是我的架构文件。我尝试了您的文件版本,其列的深度与 actAs 相同,并将 actAs 更改为带有括号 - 我得到了同样的错误。而且,就像你说的——新文件看起来不错。它必须是别的东西。但是什么? :(
  • 不带[Sluggable, Timestampable] 试试你的,用我的{ Timestampable: ~ }。这可能是因为由于冒号/波浪号构造,timestampable 需要一个值。
  • 请原帖编辑。我试过你的改变。我不认为这是架构文件。我什至没有自己编写这些文件。他们应该没问题。这是另一回事。
  • 奇怪,你运行的是哪个版本的 symfony?
  • charlie@mystery:~/sfproject$ ./symfony -V symfony version 1.4.16 (/home/charlie/sfproject/lib/vendor/symfony/lib) **清除——另一个项目我公司(我想加入)正在使用 Symfony 1.4,所以我正在尝试学习它。我正在使用 1.4,因为我的公司仍在使用 1.4,我想加入另一个项目。
【解决方案2】:

您的问题似乎在于使用旧架构版本生成的类。看看第一个错误:

PHP Fatal error:  Class 'columns' not found in /home/charlie/sfproject/lib/model/doctrine/base/BasePost.class.php on line 25

这是在您将 Post 重命名为 Article 之前创建的类(看起来您曾尝试过使用 Posts)。当您在模式中删除或重命名模型时,symfony 不会为您删除旧的类文件,但它确实提供了一个运行命令,该命令将找到任何孤立类并提示您确认它们的删除。命令是:

./symfony doctrine:clean-model-files

使用它来摆脱旧的剩余类,然后与 Mike 的解决方案一起,您可能只是在做生意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 2011-10-20
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多