2013-09-13 8 views
0

Я использую Красноватый наружный каркас laravel от https://github.com/illuminate/database. Ниже мой композитор файлEloquent Validation для композитного уникального ключа

{ 
    "require": { 
     "illuminate/database": "*", 
     "illuminate/validation": "*", 
     "dhorrigan/capsule": "*" 
    } 
} 

И из-за проблемы в Оценщика :: макияж(). Я использую один из предложенного метода в StackOverflow, чтобы использовать его как

class Validator 
{ 

    protected static $factory; 

    public static function instance() 
    { 
     if (!static::$factory) { 
      $translator = new Symfony\Component\Translation\Translator('en'); 
      static::$factory = new Illuminate\Validation\Factory($translator); 
     } 

     return static::$factory; 
    } 

    public static function __callStatic($method, $args) 
    { 

     $instance = static::instance(); 

     return call_user_func_array(array($instance, $method), $args); 

    } 
} 

Теперь можно проверить, необходимой, в и т.д. Но я не в состоянии проверить уникальный индекс ключа для двух или трех колонках. Я попробовал https://github.com/felixkiss/uniquewith-validator. Но его расширенный от Валидатора. Это работает для меня. И я не уверен, что у laravel есть способ обработать валидацию для составных уникальных ключей. Их примеры не ясны в документации.

Можете ли вы предложить способ решения сложной уникальной проверки ключа?

ответ

2

В моем случае некоторые правила (например .: уникальный) не работает, поскольку вам нужен presenceValidator, установленный в вашем заводе. Мне это удалось, и это мой подход:

Создайте свой собственный класс (MyModel) простирающийся Красноречивую модель и добавить этот метод:

public static function getResolver() 
    { 
     return parent::$resolver; 
    } 

в классе валидатора после имен (проще имена):

use \Illuminate\Validation\Factory as Factory; 

use \Illuminate\Validation\DatabasePresenceVerifier as DatabasePresenceVerifier; 

use \Symfony\Component\Translation\Translator as Translator; 

Наконец (я не использую dhorrigan капсулы, но она может работать):

$translator = new Translator('en'); 
$container = $capsule->getContainer();    
$presenceVerifier = new DatabasePresenceVerifier(MyModel::getResolver()); 
static::$factory = new Factory($translator, $container); 
static::$factory->setPresenceVerifier($presenceVerifier); 

Теперь вы можете использовать уникальное правило валидации и другие правила, основанные на БД.

Надеюсь, это поможет!

Смежные вопросы