Как передать данные из модели для просмотра (или в контроллер) - PullRequest
0 голосов
/ 01 марта 2012

Вопрос прост: Как я могу передать данные из модели для просмотра (или обратно в контроллер) для отображения ошибок типа «Ваш пароль слишком короткий»

Вот контроллер

class UsersController extends Controller {

    private $username;
    private $password;

    function register()
    {
        if($_POST)
        {
            $this->User->username = $_POST['username'];
            $this->User->password = $_POST['password'];
            $this->User->register();
        }
    }



}

модель

class User extends Model {

    public $username;
    public $password;

    function register()
    {
        $username = $this->username;
        $password = $this->password;

        if (!empty($username) && !empty($password))
        {
            // registration process
        }
        else
        {
            // "you must provide a username and password" or something like that
        }
    }

Ответы [ 4 ]

1 голос
/ 01 марта 2012

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

1 голос
/ 01 марта 2012

Просто включите функцию register в вашей модели return "PASSWORD"; для контроллера, и пусть ваш контроллер получит возврат от модели и вернет его к виду. Позвольте представлению интерпретировать, что вывод ошибки для "ПАРОЛЯ".

Пример:

контроллер

class UsersController extends Controller {

    private $username;
    private $password;

    function register()
    {
        if($_POST)
        {
            $this->User->username = $_POST['username'];
            $this->User->password = $_POST['password'];
            return $this->User->register();
        }
    }
}

модель

class User extends Model {

    public $username;
    public $password;

    function register()
    {
        $username = $this->username;
        $password = $this->password;

        if (!empty($username) && !empty($password))
        {
            // ...
            return "SUCCESS";
        }
        else
        {
            return "PASSWORD";
        }
    }
}

вид

$responses = array("SUCCESS" => "Registered Successfully!", "PASSWORD" => "You must provide a username and password!");

$result = $this->UsersController->register();
echo $responses[$result];
0 голосов
/ 01 марта 2012
public function addAction()
{
    $form = $this->_getForm();
    $this->view->form = $form;
    $this->render('add', null, true);
}

public function editAction()
{
    $id = $this->getRequest()->getParam(0);
    $Model = DI::get('yourclass_Model');
    $form = $this->_getForm();
    $data = $Model->getData();
    $form->populate($data);
    $this->view->flashMessages = $this->_helper->FlashMessenger->getMessages();
    $this->view->form = $form;
    $this->render('add', null, true);
}

public function saveAction()
{
    $form = $this->_getForm();
    $Model = DI::get('yourclass_Model');
    try{
    $saved = $Model->saveForm($form, $_POST);
    } catch (Exception $e) {
       echo "<pre>";
       print_r($e);
       exit;
    }
    if($saved)
    {
        $this->_helper->FlashMessenger('Record Saved!');
        $this->_redirect("edit".$form->id->getValue(), array('exit'=>true));
    } 
    $this->view->errorMessage = 'There were some errors';
    $this->view->form = $form;
    $this->render('add', null, true);
}
0 голосов
/ 01 марта 2012

Создайте класс, который реализует шаблон Singleton и интерфейс ArrayAccess.Или создайте нечто подобное с внедрением зависимостей.

Окончательное решение будет, если вы создадите некоторую архитектуру проверки.(Модель проверяет себя и состояние ошибки доступно в представлениях.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...