0

私は Laravel を使用しており、それは Validators です。

コントローラーに次のコードがあります。

class ResellerController extends BaseController{

    public function add() {

        //some code before

        $userValidator =  new App\Services\Validators\UserCreateValidator();
        //HERE I WANT TO REMOVE THE company KEY FROM THE RULES IN THE USERS CREATE VALIDATOR
        $userValidator->removeRule('company');      

        //code execution continues      
    }
}

UserCreateValidator は、親 Validator クラスを拡張します。

namespace App\Services\Validators;

class UserCreateValidator extends Validator {

    public static $rules = array(
        'firstName' => 'required',
        'lastName' => 'required',
        'email' => 'required|email|unique:users',
        'company' => 'required'
    );  
}

そして、これがベース Validator クラスです。

namespace App\Services\Validators;

abstract class Validator {

    /**
     * Validation rules
     * @var array
     */
    public static $rules;

    //THIS CODE DOES NOT WORK IN THE CONTROLLER UP
    public static function removeRule($ruleKey){

        if(is_array($ruleKey))
        {
            foreach($ruleKey as $key)
            {
                if(!array_key_exists($key, static::$rules)) continue;

                unset(static::$rules[$key]);
            }

            return true;
        }

        if(!array_key_exists($ruleKey, static::$rules)) //return false;

        unset(static::$rules['company']);

        return true;
    }
}

インの設定解除が機能static::$rules[$key]ResellerControllerません。

XDEBUGセッション (この行が実行された後)で、 as プロパティstatic::$rules['company']にまだ存在することがわかります。UserCreateValidator

Late Static Bindingがこの問題を解決するはずだと思いましたか? なにが問題ですか?

4

1 に答える 1

0

問題は解決された。以下のコメント部分にありました。

if(!array_key_exists($ruleKey, static::$rules)) //return false;

のコメントを外した後、設定解除は正常に機能していreturn falseます。

愚かな間違い:)

于 2014-12-03T12:30:44.323 に答える