17529
CakePHPを勉強中です。

バリデーションを練習しているのですが下記のエラーが出てしまいます。

> Deprecated (16384): Validation::notEmpty() is deprecated. Use
> Validation::notBlank() instead. [CORE/Cake/Utility/Validation.php, line 60]

対象サイトは下記です。  
<http://cakephp.kir.jp/posts/add>

モデルは下記のとおりです

```

    class Post extends AppModel {
        public $validate = array (
                'タイトル' => array (
                        'rule' => 'notEmpty',
                        'message' => 'データが入力されていません'
                ),
                '記事' => array (
                        'rule' => 'notEmpty',
                        'message'=>'記事を入力してください。'
                )
        );
    }
    
```

色々検索しては見たのですが解決策が見当たらず完全に打つ手なしになってしまったので質問させていただきました  
ヒントでもいいのでよろしくお願い致します
CC BY-SA 3.0
2015-10-10T18:50:09.280
17516
2015-10-11T12:39:29.607
2015-10-10T19:09:44.190
8000
7535
question
php cakephp
Validation::notEmpty() is deprecated. Use Validation::notBlank() instead. と表示される
メッセージをちゃんと読んでみましょう。英語だからとあきらめずに。  
notEmptyではなくて代わりにnotBlankを使え、と言っています。  
"deprecated"というのは割とよくでてくる表現で「非推奨」というニュアンスでしょうか。  
大体が今後廃止予定だからもう使うな、とかあまりいい動きをしないとかそういう理由です。  
そしてその代わりになるものが用意されている場合が多いので、deprecatedと出てきたら別の方法を探してみましょう。
CC BY-SA 3.0
2015-10-10T19:19:06.413
17519
2015-10-10T19:19:06.413
12551
17516
answer
> Deprecated (16384): Validation::notEmpty() is deprecated. Use
> Validation::notBlank() instead. **[CORE/Cake/Utility/Validation.php, line
> 60]**

エラーメッセージに、ソースのどこで warning が出たのか出ているので、そこを見てみましょう。

ちなみに CakePHP の該当箇所のソースは次のようになっています（CakePHP 2.7.5で確認）。

```

    /**
     * Backwards compatibility wrapper for Validation::notBlank().
     *
     * @param string|array $check Value to check.
     * @return bool Success.
     * @deprecated 2.7.0 Use Validation::notBlank() instead.
     * @see Validation::notBlank()
     */
        public static function notEmpty($check) {
            trigger_error('Validation::notEmpty() is deprecated. Use Validation::notBlank() instead.', E_USER_DEPRECATED);
            return static::notBlank($check);
        }
    
    /**
     * Checks that a string contains something other than whitespace
     *
     * Returns true if string contains something other than whitespace
     *
     * $check can be passed as an array:
     * array('check' => 'valueToCheck');
     *
     * @param string|array $check Value to check
     * @return bool Success
     */
        public static function notBlank($check) {
            if (is_array($check)) {
                extract(static::_defaults($check));
            }
    
            if (empty($check) && (string)$check !== '0') {
                return false;
            }
            return static::_check($check, '/[^\s]+/m');
        }
    
```

ソースを見ればわかるように`notEmpty()`が呼ばれた場合は、`trigger_error()`で警告を出した後に内部で `notBlank()`
を呼び出してその値を返しています。

つまりこの場合は、機能的には `notBlank` も `notEmpty` も同じものですが、CakePHPの作者は今後は `notEmpty`
を使ってほしくないということを`deprecated`というキーワードで明示しているということになります。ソースに明記されているようにVersion2系では
2.7.0 以降の仕様です。

```

    @deprecated 2.7.0 Use Validation::notBlank() instead.
    
```

なので、ここは素直に`notEmpty`の代わりに`notBlank`を使えばOKです。
CC BY-SA 3.0
2015-10-11T08:11:26.020
17529
2015-10-11T08:11:26.020
10492
17516
answer