Chciałbym stworzyć walidacje danych umiejscowioną w MVC. W poniższym kodzie walidacje umieściłem w kontrolerze(akcja insert). Mój cały problem sprowadza się do tego miejsca
if(!$validation->isError==0){ //co tutaj zrobic }else { $model=$this->loadModel('dish'); $model->insert($_POST); $this->redirect('?task=dish&action=index'); }
Gdy dane są poprawne to jest ładowany model, który umieszcza ładnie i poprawnie dane w bazie danych.
Lecz co zrobić gdy dane są niepoprawne? W moim założeniu jest żeby po wprowadzeniu błędnych danych wyświetliła się dalej strona z formularzem z informacją o błędnych danych. Więc jak zrobić aby przekazać obiekt $validation do widoku z formularzem tak abym mógł potem w widoku wyciągnąć informacje o błędach
dishcontroller.php
require_once ('controller.php'); require_once ('validator.php'); class DishController extends Controller{ public function index(){ $view=$this->loadView('dish'); $view->index(); } //laduje widok z formularzem dodania potrawy public function add(){ $view=$this->loadView('dish'); $view->add(); } //laduje widok z przegladem potrawy public function show(){ $view=$this->loadView('dish'); $view->show($_GET['id']); } //laduje model ktory umieszcza dane w bazie public function insert(){ $validation= new Validator; $validation->MessageText=NULL; $validation->isError=0; $dishname=$_POST['dishname']; $validation->viewMessage(); if(!$validation->CheckString($dishname,2)){ $validation->setMessage('dishname','Nazwa dania jest zbyt krótka'); }; $validation->viewMessage(); if(!$validation->isError==0){ //co tutaj zrobic }else { $model=$this->loadModel('dish'); $model->insert($_POST); $this->redirect('?task=dish&action=index'); } } public function delete(){ $model=$this->loadModel('dish'); $model->delete($_GET['id']); $this->redirect('?task=dish&action=index'); } };
dishview.php
class DishView extends View{ public function index(){ $dish=$this->loadModel('dish'); $this->set('dishList', $dish->getAll()); $this->render('indexDish','dish/'); } public function add($obj=null){ $this->render('addDish', 'dish/'); //laduje plik z formularzem addDish.html.php, formularz ten przesyła dane do akcji insert(); } public function show($id){ $dish=$this->loadModel('dish'); $this->set('dishShow', $dish->getOne($id)); $this->render('showDish', 'dish/'); } }