2013-05-13 3 views
3

Я пытаюсь использовать Laravel'4 Eloquent вне рамки, так как пакет Illuminate/Database был сделан доступным автономно через композитор.Невозможно сделать класс валидатора Laravel 4 вне рамки

Eloquent сам работает нормально, но я заблокирован, пытаясь реализовать правила проверки.

Я попробовал сначала с некоторой заранее встроенной библиотекой как Ardent, а затем с моим собственным кодом, но результат это то же самое, я получил эту фатальную-ошибку:

Fatal error: Call to a member function make() on a non-object in vendor\illuminate\support\Illuminate\Support\Facades\Facade.php on line 177

Проблемы всегда начинается, когда я call Validator :: make();

$validator = Validator::make(
    $this->attributes, 
    array('name' => 'required') 
); 

Глядя в отладке, кажется, что static::resolveFacadeInstance('validator'); называется, но она просто возвращает null.

Я не знаком с тем, как Фасады предназначены для работы, может ли кто-нибудь указать мне в правильном направлении? Спасибо!

Это мой composer.json:

{ 
    "require": { 
     "illuminate/database": "~4.0", 
     "illuminate/validation" : "~4.0", 
     "laravelbook/ardent": "dev-master" 
    }, 
    "config": { 
     "preferred-install": "dist" 
    }, 
    "minimum-stability": "dev" 
} 
+0

Устанавливаете ли вы его с помощью Composer? – Usman

+0

Да, как я сказал, Красноречивый хорошо работает, я добавлю свой composer.json к вопросу ... – Ingro

+0

Что делать, если вы замените валидацию на «подсветку/проверку»: «4.0.* @ dev "и база данных с' "подсветкой/базой данных": "4.0. * @ dev" '? – Usman

ответ

4

Для людей, которые могут нуждаться в дополнительной информации я сообщу здесь ответ дал мне на GitHub репо Laravel путем bencorlett(link):

// Store the factory instance somewhere, Maybe like: 

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(); 

     switch (count($args)) 
     { 
      case 0: 
       return $instance->$method(); 

      case 1: 
       return $instance->$method($args[0]); 

      case 2: 
       return $instance->$method($args[0], $args[1]); 

      case 3: 
       return $instance->$method($args[0], $args[1], $args[2]); 

      case 4: 
       return $instance->$method($args[0], $args[1], $args[2], $args[3]); 

      default: 
       return call_user_func_array(array($instance, $method), $args); 
     } 
    } 
} 

$validator = Validator::make($data, $rules); 
3

У меня есть работа над проектом, над которым я работаю. К сожалению, документация о том, как использовать ее вне рамок, отсутствует. Документация о том, как использовать Eloquent вне рамок, по крайней мере существует, но является изворотливой.

Итак, сначала поместите его в composer.json:

"illuminate/validation": "4.1.*", 

Объект проверки производится с помощью объекта фабрики. Этот заводский объект - это то, к чему обращается фасад. Таким образом, вместо того, чтобы использовать фасад, получить этот объект следующим образом:

$factory = new \Illuminate\Validation\Factory(new \Symfony\Component\Translation\Translator('en')); 

Вы можете затем make ваш объект проверки:

$validator = $factory->make($inputArray, $rulesArray); 

Есть несколько предостережений использования этого вне рамок, которые я До сих пор.

Во-первых, все зависящие от базы данных проверки не сработают, поскольку у него нет возможности запросить базу данных. Это решается путем предоставления проверки объекта на Illuminate\Validation\DatabasePresenceVerifier объект, который оборачивает менеджер баз данных, которые вы можете получить от объекта, который вы сделали при настройке красноречив:

$validator->setPresenceVerifier(new \Illuminate\Validation\DatabasePresenceVerifier($capsule->getDatabaseManager()); 

Другой является то, что сообщения о валидации по умолчанию не установлены вверх. До сих пор я обработал это, просто используя третий аргумент функции make, чтобы указать пользовательские правила для каждого поля.