Cake \ ORM \ TableRegistry不起作用

时间:2016-05-10 07:29:49

标签: php cakephp composer-php

我正在尝试在我的代码中使用Cake \ ORM \ TableRegistry。 Composer已成功安装,但代码显示此错误。

Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in C:\xampp\htdocs\ORM\vendor\cakephp\datasource\EntityTrait.php on line 528

问题出在哪里? 我正在使用php版本5.4.7的操作系统窗口

代码

<?php
require_once './vendor/autoload.php';

use Cake\Datasource\ConnectionManager;
use Cake\ORM\TableRegistry;
ConnectionManager::config('default', [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    'database' => 'test',
    'username' => 'root',
    'password' => '',
    'cacheMetaData' => false // If set to `true` you need to install the optional "cakephp/cache" package.
]);


$articles = TableRegistry::get('student');
foreach ($articles->find() as $article) {
    echo $article->name;
}

1 个答案:

答案 0 :(得分:3)

  

解析错误:...在第528行的... datasource \ EntityTrait.php

code on that line是:

$class = static::class;

这不是因使用供应商代码而导致的错误 - php 无法解析文件

php的版本太旧了

虽然the composer file for the datasource repo没有php要求,但是{repo的构建来自composer file for cakephp/cakephp的确是:

"require": {
    "php": ">=5.5.9",

在这种情况下,问题是代码使用features introduced in 5.5,即:

  

自PHP 5.5起,class关键字也用于类名   解析度。您可以获取包含完全限定名称的字符串   使用ClassName :: class的ClassName类。这是特别的   对命名空间类有用。

     

示例#9班级名称解析

<?php
namespace NS {
    class ClassName {
    }

    echo ClassName::class;
}
?>

由于问题中的php版本是5.4.7,因此它没有此功能,并且代码被视为解析错误。

最简单的解决方案是升级php以满足CakePHP的版本要求。 Note that 5.4 is no longer supported

5.4 is EOL, 5.5 is approaching EOL