sono su laravel e avrei la necessità di generare le regole di validazione dinamicamente
questo è un file che ho creato io in "app/config" chiamato "validator.php"
Codice: Seleziona tutto
<?php
$validator = array(
/*
|--------------------------------------------------------------------------
| tables rules
|--------------------------------------------------------------------------
|
| This file containt the rules of database table
|
*/
'table' => array(
/**
* admins table
*/
'admin' => array(
),
/**
* companys table
*/
'company' => array(
),
/**
* consultants table
*/
'consultant' => array(
),
/**
* managers table
*/
'manager' => array(
),
/**
* users table
*/
'user' => array(
/**
* email field
*/
'email' => array(
'required' => true,
'format' => 'email',
'minlenght' => 5,
'maxlenght' => 320,
),
/**
* password field
*/
'password' => array(
'required' => true,
'format' => 'alpha_num',
'minlenght' => 4,
'maxlenght' => 30,
),
/**
* actor field
*/
'actor' => array(
),
)
),
/*
|--------------------------------------------------------------------------
| rules
|--------------------------------------------------------------------------
|
| This is the self constructor
|
*/
'rule' => array(
'user' => call_user_func(
function($table){
var_dump($table);
return $table;
},
$validator),
//Config::get('validator.table.user)),
)
);
return $validator;
adesso in (array di rule) se metto config::get(validator.table.user') pare andare in loop; ed il browser mi restituisce nessun dato ricevuto.
effettivamente se io mettessi al posto di 'validator.table.user' > 'validator.rule.user' la funzione chiamerebbe tante volte se stessa all'infinito, quindi mi viene da pensare che il metodo Config::get() analizzi sempre ogni frammento dell'array .
provando ad assegnare l'array ad una variabile "validator" e provando ad accedere tramite $validator['table']['user'], il debuggher del framework mi risponde:
il debuggher fa riferimento a questa riga:
non riesco a trovare un modo per passare il contenuto di:
array['table']['qualcosa'] al call_user_func di array['rules']['qualcosa']
p.s. ho già provato call_user_func_array ma non funziona lo stesso.
Qualche Suggerimento???
(Temporaneamente ho creato questa soluzione, ma non mi piace avere due array, potrei aver bisogno di accedere a qualche dato extra della configurazione senza parsarlo, qui la soluzione)
Codice: Seleziona tutto
<?php
$validator = array(
/*
|--------------------------------------------------------------------------
| tables rules
|--------------------------------------------------------------------------
|
| This file containt the rules of database table
|
*/
'table' => array(
/**
* admins table
*/
'admin' => array(
),
/**
* companys table
*/
'company' => array(
),
/**
* consultants table
*/
'consultant' => array(
),
/**
* managers table
*/
'manager' => array(
),
/**
* users table
*/
'user' => array(
/**
* email field
*/
'email' => array(
'required' => true,
'format' => 'email',
'min' => 5,
'max' => 320,
),
/**
* password field
*/
'password' => array(
'required' => true,
'format' => 'alpha_num',
'min' => 4,
'max' => 30,
),
/**
* actor field
*/
'actor' => array(
'required' => true
),
)
)
);
return array(
/*
|--------------------------------------------------------------------------
| tables rules
|--------------------------------------------------------------------------
|
| This file containt the rules of database table
|
*/
'user' => array(
'email' => call_user_func(
function ($field){
$rule = parseValidator($field);
return $rule;
}
, $validator['table']['user']['email']),
'password' => call_user_func(
function ($field){
$rule = parseValidator($field);
return $rule;
}
, $validator['table']['user']['password']),
'actor' => call_user_func(
function ($field){
$rule = parseValidator($field);
return $rule;
}
, $validator['table']['user']['actor']),
)
);
function parseValidator($table){
$rule = null;
foreach($table as $key => $value){
switch($key){
case 'required':
if($value){
$rule = (!empty($rule)) ? 'required|'.$rule : 'required';
}
break;
case 'format':
$rule = (!empty($rule)) ? $rule.'|'.$value : $value;
break;
case 'min':
$rule = (!empty($rule)) ? $rule.'|min:'.$value : 'min:'.$value;
break;
case 'max':
$rule = (!empty($rule)) ? $rule.'|max:'.$value : 'max:'.$value;
break;
}
}
return $rule;
}
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)