代码之家  ›  专栏  ›  技术社区  ›  Minzkraut Praveen

CakePHP CRUD,添加操作抛出“调用字符串上的成员函数格式”

  •  0
  • Minzkraut Praveen  · 技术社区  · 7 年前

    我正在使用CakePHP 3.5.14

    • 友谊蛋糕/积垢5.3.3
    • 和friendsofcake/crud视图0.10.0

    我一直在努力让“添加”操作生效。 它正在抛出以下错误 /vendor/cakephp/cakephp/src/View/Helper/FormHelper.php

    对字符串调用成员函数format()

    在线2785。

    $out = $widget->render($data, $this->context());
    

    扩展参数:

    [
            'formatter' => null,
            'prepend' => null,
            'append' => null,
            'inline' => null,
            'type' => 'datetime',
            'required' => false,
            'options' => null,
            'tooltip' => null,
            'templateVars' => [],
            'id' => 'created',
            'second' => false,
            'name' => 'created',
            'val' => 'CURRENT_TIMESTAMP',
            'year' => [
                'required' => false,
                'order' => 'desc'
            ],
            'month' => [
                'required' => false,
                'names' => true
            ],
            'day' => [
                'required' => false
            ],
            'hour' => [
                'required' => false,
                'format' => (int) 24
            ],
            'minute' => [
                'required' => false,
                'interval' => (int) 1,
                'round' => null
            ],
            'meridian' => [
                'required' => false
            ]
        ]
        object(Cake\View\Form\EntityContext) {
            [protected] _request => object(Cake\Http\ServerRequest) {
                params => [
                    [maximum depth reached]
                ]
                data => [[maximum depth reached]]
                query => [[maximum depth reached]]
                cookies => [
                    [maximum depth reached]
                ]
                url => 'users/add'
                base => ''
                webroot => '/'
                here => '/users/add'
                trustProxy => false
                [protected] _environment => [
                    [maximum depth reached]
                ]
                [protected] _input => null
                [protected] _detectors => [
                    [maximum depth reached]
                ]
                [protected] _detectorCache => [
                    [maximum depth reached]
                ]
                [protected] stream => object(Zend\Diactoros\PhpInputStream) {}
                [protected] uri => object(Zend\Diactoros\Uri) {}
                [protected] session => object(Cake\Network\Session) {}
                [protected] attributes => [[maximum depth reached]]
                [protected] emulatedAttributes => [
                    [maximum depth reached]
                ]
                [protected] uploadedFiles => [[maximum depth reached]]
                [protected] protocol => null
                [protected] requestTarget => null
            }
            [protected] _context => [
                'entity' => object(App\Model\Entity\User) {},
                'table' => null,
                'validator' => []
            ]
            [protected] _rootName => 'Users'
            [protected] _isCollection => false
            [protected] _tables => [
                'Users' => object(App\Model\Table\UsersTable) {}
            ]
            [protected] _validator => [
                '' => object(Cake\Validation\Validator) {}
            ]
        }
    

    我试图直接更改数据库中的各种内容,但没有得到任何可靠的结果
    (有时我在删除' DEFAULT_TIMESTAMP '但获取无效的时间戳格式,但无法在第二次测试中再现该行为)

    这就是我的Users表的外观

    CREATE TABLE `Users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(25) NOT NULL,
      `email` varchar(45) DEFAULT NULL,
      `password` varchar(65) NOT NULL,
      `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    此迁移正在创建的

    $this->table('Users')
                ->addColumn('name', 'string', [
                    'default' => null,
                    'limit' => 25,
                    'null' => false,
                ])
                ->addColumn('email', 'string', [
                    'default' => null,
                    'limit' => 45,
                    'null' => true,
                ])
                ->addColumn('password', 'string', [
                    'default' => null,
                    'limit' => 65,
                    'null' => false,
                ])
                ->addColumn('created', 'timestamp', [
                    'default' => 'CURRENT_TIMESTAMP',
                    'limit' => null,
                    'null' => false,
                ])
                ->addColumn('modified', 'timestamp', [
                    'default' => 'CURRENT_TIMESTAMP',
                    'update' => 'CURRENT_TIMESTAMP',
                    'limit' => null,
                    'null' => false,
                ])
                ->create();
    

    我的控制器基本上是空的

    class UsersController extends AppController
    {
    
    }
    

    因为我做的是遵循Crud和Crud视图入门指南。
    我被困在这一点上,如果能在这方面得到任何帮助,我将不胜感激。

    以下是完整文件的粘贴箱,以供参考:
    Migratoin 20180406144732_Initial.php
    AppController.php
    Stacktrace
    Complete Composer show output

    如果我遗漏了任何信息,请告诉我。
    感谢和问候,
    明茨克劳特

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jose Diaz-Gonzalez    7 年前

    相信 CakePHP希望这些字段是datetime字段,而不是时间戳。如果你改变了这一点,它应该会像预期的那样工作。

    同样,虽然您当然可以设置默认/更新值,但由于它是时间戳,您需要更改这些值,或者让CakePHP ORM通过 TimestampBehavior

    推荐文章