8

私は現在、小さなオンライン ゲームの実績システムに取り組んでいます。アチーブメント エンティティには、基本的に 4 つの属性があります。

  • ID
  • 獲得者
  • 稼いだ
  • 進捗

最後の 1 つはパーセンテージで、0 から 100 までの数値を意味します。 Symfony2 / Doctrine ORM):

public function setProgress($progress)
    {
        $this->progress = max(min($progress, 100), 0);

        return $this;
    }

ここで重要な行はmax(min($progress, 100), 0).

それはまったく問題なく動作します.PHPに別の組み込み関数がまったく同じことを行っているかどうか、そして私がやっていることは大丈夫かどうか(良い開発スタイルに関して)

4

4 に答える 4

3

Symfony2の検証コンポーネントからエンティティにいくつかの制約を追加することを検討する必要があります。

use Symfony\Component\Validator\Constraints as Assert;

class Achievement
{
   /**
    * @Assert\Range(min=0, max=100)
    */
    protected progress;
}

バリデーター サービスは、たとえばフォームの検証時に自動的に呼び出されますが、コントローラーなどでバリデーター サービスを取得して手動で呼び出すこともできます。

$achievement = new Achievement();
$errors = $this->get('validator')->validate($achievement);
于 2013-04-01T10:50:21.607 に答える
1

Range次の制約を使用できます。

use Symfony\Component\Validator\Constraints\Range;

class Achievement
{
    /**
     * @Range(min=0, max=100)
     */
    private $progress;
}

Symfony での検証は別のレイヤーで処理されるため、セッターで行うべきではありません。

于 2013-04-01T10:50:05.520 に答える
0

短い答えはノーです。PHPには、数値を下限と上限で「切り捨てる」組み込み関数はありません。そして、書くのは本当に大丈夫min(max(x, max_value), min_value)です-それは短くて読みやすいです.

于 2013-04-01T10:46:13.427 に答える