Zend Framework Custom фильтр в собственной директории библиотеки - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь заставить мой собственный фильтр работать ...

У меня есть следующий код в моем AuthController:

<?php
public function loginAction()
{
    // Get db var
    $db = $this->_getParam('db');

    // Load loginform
    $loginForm = new Application_Form_Auth_Login();

    // Form posted?
    if ($loginForm->isValid($_POST))
    {
        // Setup adapter
        $adapter = new Zend_Auth_Adapter_DbTable(
          $db,
          'users',
          'username',
          'password'
          );

        // Set identity and credential
        $adapter->setIdentity($loginForm->getValue('username'));
        $adapter->setCredential($loginForm->getValue('password'));

        // Setup Zend_Auth and try to authenticate the user
        $auth = Zend_Auth::getInstance();
        $result = $auth->authenticate($adapter);

        // If authentication succeed
        if ($result->isValid())
        {
            $this->_helper->FlashMessenger('Inloggen geslaagd');
            $this->_redirect('/');
            return;
        }
        else
        {
            $this->_helper->FlashMessenger('Inloggen geslaagd');
        }
    }

    $this->view->loginForm = $loginForm;
}
?>

Код формы:

<?php
class Application_Form_Auth_Login extends Zend_Form
{
  /**
   * Default_Form_Auth_Login::init()
   * 
   * Form which authenticates guests
   * 
   * @return void
   */
  public function init()
  {    
    $this->setMethod('post');    

    $this->addElement('text', 'username', array(
        'label' => 'Gebruikersnaam:',
        'required' => true,
        'filters' => array('StringTrim'),
      ));

    $this->addElement('password', 'password', array(
      'label' => 'Wachtwoord:',
      'required' => true,
      'filters' => array('Pcw_Filter_Hash')
      ));

    $this->addElement('hash', 'formToken', array(
      'salt' => 'unique'
      ));

    $this->addElement('submit', 'submit', array(
      'ignore' => true,
      'label' => 'Inloggen',
      )); 

  }  
}

Код моего пользовательского фильтра:

<?php

class Pcw_Filter_Hash implements Zend_Filter_interface
{
  /**
   * HashFilter::filter()
   * 
   * @param string $value
   * @return
   */
  public function filter($value)
  {
    return hash('sha512', $value);
  }  
}

При его использовании я получаю следующее сообщение: Сообщение: Плагин с именем 'Pcw_Filter_Hash' не найден в реестре;используемые пути: Zend_Filter_: Zend / Filter /

Я нашел документацию по настройке пространств имен и добавлению путей, но я не могу заставить что-либо работать ...

Есть ли у кого-нибудь работающее решение длямоя проблема?Это будет высоко оценено!

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 20 февраля 2012

Вы должны добавить путь к вашему фильтру в вашем из

<?php
class Application_Form_Auth_Login extends Zend_Form
{
    public function init()
    {    
        // add the path where own filters are located
        $this->addElementPrefixPath(
            'Pcw_Filter',
            APPLICATION_PATH . '/../library/Pwc/Filter',
            'filter'
        );

        $this->setMethod('post');

        ...
    }
}

Возможно, вам придется изменить путь в соответствии с вашим собственным макетом вашего приложения.

2 голосов
/ 21 февраля 2012

в вашем application.ini добавьте эту строку autoloaderNamespaces[] = "Pcw_", затем убедитесь, что файл с именем Hash.php и что он живет в /application/libray/Pcw/Filter, а имя класса должно остаться Pcw_Filter_Hash, если вы сделаете так, чтобы автозагрузчик нашелЭто.

1 голос
/ 20 февраля 2012

Я бы лучше переписал вам элементы формы, подобные этому:

$password = new Zend_Form_Element_Password("password");
$password->setLabel("Wachtwoord")
         ->setRequired(true); 

$password->addFilter(new  Pcw_Filter_Hash() );

но я не уверен, что это может сработать:

$this->addElement('password', 'password', array(
      'label' => 'Wachtwoord:',
      'required' => true,
      'filters' => array(new Pcw_Filter_Hash())
      ));

и вам следует дважды проверить, что Pcw определено в application.ini

Я надеюсь, что ваша проблема скоро будет решена :)

...