Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to correctly instantiate the Iluminate class outside of laravel

I have Eloquent working outside of Laravel with no problems. Now Im trying to use also the Validation class by:

<?php

namespace User;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Validator;

class User extends Model {

    private $rules = array(
        'firstName' => 'required|min:2|max:50',
        'lastName'  => 'required|min:2|max:50',
    );

    public function validate($data)
    {
        $v = Validator::make($data, $this->rules);
        return $v->passes();
    }

}

Executing that code give me an error:

 Call to undefined method Illuminate\Validation\Validator::make()

That is correct since the method make is not on the class Validator but in his factory: enter image description here

How can I correctly instantiate the Validation lib in order to get this working?

BTW, this is my composer.json:

{
    "require": {
        "slim/slim": "^2.6",
        "illuminate/database": "^5.1",
        "illuminate/validation": "^5.1"
    },
    "autoload": {
        "classmap": [
            "app/model"
        ]
    }

}
like image 921
DomingoSL Avatar asked Nov 22 '25 11:11

DomingoSL


1 Answers

To get the validation package to work outside of Laravel, you'll also need the translation package.

So first create an instance of the translator, and then use that to make a validation factory.

Working example

<?php

/*
Required composer packages:
    illuminate/validation
    illuminate/translation
*/

/*
Translation language files directory is the same as with Laravel
    ./lang/en/validation.php
*/

require_once 'vendor/autoload.php';

// You need to specify where the translation files is
$test_translation_path = __DIR__.'/lang';
$test_translation_locale = 'en';

// Set up data for the validator
$test_input_data = ['field' => 'value'];
$test_input_rules = ['field' => 'required'];

$translation_file_loader = new Illuminate\Translation\FileLoader(new Illuminate\Filesystem\Filesystem, $test_translation_path);

$translator = new Illuminate\Translation\Translator($translation_file_loader, $test_translation_locale);

$validation_factory = new Illuminate\Validation\Factory($translator);

$validator = $validation_factory->make($test_input_data, $test_input_rules);

if ($validator->fails()) {
    die('Validation failed');
}

die('Validation passed!');
like image 181
user2479930 Avatar answered Nov 25 '25 10:11

user2479930



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!