67056


いまCakePHP4 CookbookのCMSチュートリアルを試しています。  
CakeはPHPバージョン7.3.xのサーバーでホストしています。

CakePHP4 Cookbook 「[Articles
の検証ルールの更新](https://book.cakephp.org/4/ja/tutorials-and-examples/cms/articles-
controller.html#articles)」の箇所で指示通り

[code]

    use Cake\Validation\Validator;
    
[/code]

の読み込みと、

[code]

    public function validationDefault(Validator $validator)
    {
        $validator
            ->allowEmptyString('title', false)
            ->minLength('title', 10)
            ->maxLength('title', 255)
    
            ->allowEmptyString('body', false)
            ->minLength('body', 10);
    
        return $validator;
    }
    
[/code]

のメソッド追加をして

[code]

    <?php
    namespace App\Model\Table;
    
    use Cake\ORM\Table;
    //Textクラス
    use Cake\Utility\Text;
    
    use Cake\Validation\Validator;
    
    class ArticlesTable extends Table
    {
        public function initialize(array $config) : void
        {
            $this->addBehavior('Timestamp');
        }
    
        public function beforeSave($event, $entity, $options)
        {
            if ($entity->isNew() && !$entity->slug) {
                $sluggedTitle = Text::slug($entity->title);
                //スラグをスキーマで定義されている最大長に調整
                $entity->slug = substr($sluggedTitle, 0, 191);
            }
        }
    
        public function validationDefault(Validator $validator)
        {
            $validator
                ->allowEmptyString('title', false)
                ->minLength('title', 10)
                ->maxLength('title', 255)
    
                ->allowEmptyString('body', false)
                ->minLength('body', 10);
    
            return $validator;
        }
    
    }
    
[/code]

というコードにして/articles/をリロードしたところ、

[code]

    Fatal error: Declaration of App\Model\Table\ArticlesTable::validationDefault(Cake\Validation\Validator $validator) must be compatible with Cake\ORM\Table::validationDefault(Cake\Validation\Validator $validator): Cake\Validation\Validator in /home/***/++++.com/public_html/cms/src/Model/Table/ArticlesTable.php on line 10
    
[/code]

というエラーが出てしまい、回避できずに困っております。  
どなたかこちらのエラー回避方法をご存知ありませんか？  
よろしくお願いいたします。


CC BY-SA 4.0
2020-05-27T16:23:25.773
67049
2020-05-28T00:07:02.323
36023
question
php cakephp
CakePHP4 Cookbookの「Articles の検証ルールの更新」で "Declaration of ~ must be compatible with ~"エラー


`Fatal error: Declaration ~` は親クラスのメソッドと引数、戻り値の型定義が異なる場合に出るエラーです。

親クラスの `Cake\ORM\Table::validationDefault` は、

[code]

    public function validationDefault(Validator $validator): Validator
    
[/code]

となっていますので同様に戻り値の型指定 `: Validator` を入れてください。

* * *

そもそもドキュメントのソースコードが3.xのままの記述だったので、間違いの元でしたね。

該当ページで、英語版のソースコードとの差分は以下になります。

<https://github.com/cakephp/docs/pull/6651/files>

修正リクエストは投げましたので、そのうち反映されるはずです。


CC BY-SA 4.0
2020-05-28T00:06:05.390
67056
2020-05-28T00:06:05.390
2668
67049
answer


すいません。私の記述ミスでした。

[code]

    public function validationDefault(Validator $validator) : Validator
    
[/code]

としなければならないところ、

[code]

    : Validator
    
[/code]

を抜かして書いておりました。私の見落としでした。


CC BY-SA 4.0
2020-05-28T00:07:02.323
67057
2020-05-28T00:07:02.323
36023
67049
answer