78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Violin example. Extending.
 | |
|  * 
 | |
|  * You can extend the Violin class to create your own validator,
 | |
|  * making it easier to keep everything in one place, and more
 | |
|  * importantly, the ability to pass dependencies into the
 | |
|  * class.
 | |
|  *
 | |
|  * This example checks a specfic value isn't already taken
 | |
|  * within a table in your database.
 | |
|  */
 | |
| 
 | |
| require '../../vendor/autoload.php';
 | |
| 
 | |
| //-- Validator.php
 | |
| 
 | |
| use Violin\Violin;
 | |
| 
 | |
| class Validator extends Violin
 | |
| {
 | |
|     protected $db;
 | |
| 
 | |
|     public function __construct(PDO $db)
 | |
|     {
 | |
|         $this->db = $db;
 | |
| 
 | |
|         $this->addRuleMessage('unique', 'That {field} is already taken.');
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if a value already exists in a database table.
 | |
|      * 
 | |
|      * @param  mixed $value
 | |
|      * @param  array $input
 | |
|      * @param  array $args
 | |
|      * 
 | |
|      * @return bool
 | |
|      */
 | |
|     public function validate_unique($value, $input, $args)
 | |
|     {
 | |
|         $table  = $args[0];
 | |
|         $column = $args[1];
 | |
|         $value  = trim($value);
 | |
| 
 | |
|         $exists = $this->db->prepare("
 | |
|             SELECT count(*) as count
 | |
|             FROM {$table}
 | |
|             WHERE {$column} = :value
 | |
|         ");
 | |
| 
 | |
|         $exists->execute([
 | |
|             'value' => $value
 | |
|         ]);
 | |
| 
 | |
|         return ! (bool) $exists->fetchObject()->count;
 | |
|     }
 | |
| }
 | |
| 
 | |
| //-- Any other file
 | |
| 
 | |
| // Some database dependency
 | |
| $db = new PDO('mysql:dbname=project;host=localhost', 'root', 'root');
 | |
| 
 | |
| $v = new Validator($db);
 | |
| 
 | |
| $v->validate([
 | |
|     'username'  => ['alex', 'required|alpha|min(3)|max(20)|unique(users, username)'],
 | |
|     'email'     => ['alex@codecourse.com', 'required|email|unique(users, email)']
 | |
| ]);
 | |
| 
 | |
| if ($v->passes()) {
 | |
|     // Passed
 | |
| } else {
 | |
|     var_dump($v->errors()->all());
 | |
| }
 |