Error de ZendFatal: no se encontró la clase 'Zend \ Ldap \ Ldap'
Entonces, estoy tratando de hacer una autenticación Ldap, siguiendo los documentos en
https://zf2.readthedocs.org/en/latest/user-guide/skeleton-application.html
Acabo de reemplazar el módulo 'Álbum' con un módulo 'Auth' y uso el código de muestra para la autenticación Ldap
https://zf2.readthedocs.org/en/latest/modules/zend.authentication.adapter.ldap.html
pero recibo este error donde Zend no puede encontrar la clase Ldap cuando envío el formulario con los datos de inicio de sesión.
Error fatal: la clase 'Zend \ Ldap \ Ldap' no se encuentra en C: \ wamp \ www \ sade \ vendor \ zendframework \ zend-authentication \ src \ Adapter \ Ldap.php en la línea 139
Estoy usando composer, para el marco zend y el atuoloader para los módulos, ya tengo errores relacionados con una clase que no se encuentra pero mis propias clases, no clases de Zend como Ldap.
Gracias.
Aquí está la estructura de los archivos y carpetas.
/module
/Auth
/config
module.config.php
/src
/Auth
/Controller
AuthController.php
/Form
AuthForm.php
/Model
Auth.php
/view
/auth
/auth
index.php
Module.php
Y el código principal del módulo:
module.config.php
return array(
'controllers' => array(
'invokables' => array(
'Auth\Controller\Auth' => 'Auth\Controller\AuthController',
),
),
'router' => array(
'routes' => array(
'auth' => array(
'type' => 'segment',
'options' => array(
'route' => '/auth[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Auth\Controller\Auth',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'auth' => __DIR__ . '/../view',
),
),
);
AuthController.php
//AuthController.php
namespace Auth\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Authentication\AuthenticationService;
use Zend\Authentication\Adapter\Ldap as AuthAdapter;
use Zend\Config\Reader\Ini as ConfigReader;
use Zend\Config\Config;
use Zend\Log\Logger;
use Zend\Log\Writer\Stream as LogWriter;
use Zend\Log\Filter\Priority as LogFilter;
use Auth\Model\Auth;
use Auth\Form\AuthForm;
class AuthController extends AbstractActionController
{
public function indexAction()
{
$form = new AuthForm();
$form->get('submit')->setValue('index');
$request = $this->getRequest();
if ($request->isPost()) {
$Auth = new Auth();
$Auth->username = $this->getRequest()->getPost('username');
$Auth->password = $this->getRequest()->getPost('password');
$AuthenticationService = new AuthenticationService();
$configReader = new ConfigReader();
$configData = $configReader->fromFile('config/ldap-config.ini');
$config = new Config($configData, true);
$log_path = $config->production->ldap->log_path;
//die($log_path)."--";
$options = $config->production->ldap->toArray();
unset($options['log_path']);
$adapter = new AuthAdapter($options,
$Auth->username,
$Auth->password);
$form->setInputFilter($Auth->getInputFilter());
$form->setData($request->getPost());
$result = $AuthenticationService->authenticate($adapter);
if ($log_path) {
$messages = $result->getMessages();
$logger = new Logger;
$writer = new LogWriter($log_path);
$logger->addWriter($writer);
$filter = new LogFilter(Logger::DEBUG);
$writer->addFilter($filter);
foreach ($messages as $i => $message) {
if ($i-- > 1) { // $messages[2] and up are log messages
$message = str_replace("\n", "\n ", $message);
$logger->debug("Ldap: $i: $message");
}
}
}
//return $this->redirect()->toRoute('login');
}
return array('form' => $form);
}
public function LoginAction()
{
}
public function LogoutAction()
{
}
}
AuthForm.php
//AuthForm.php
namespace Auth\Form;
use Zend\Form\Form;
class AuthForm extends Form
{
public function __construct($name = null)
{
// we want to ignore the name passed
parent::__construct('auth');
$this->add(array(
'name' => 'username',
'type' => 'Text',
'options' => array(
'label' => 'Nombre de usuario',
),
));
$this->add(array(
'name' => 'password',
'type' => 'Password',
'options' => array(
'label' => 'Contraseña',
),
));
$this->add(array(
'name' => 'submit',
'type' => 'Submit',
'attributes' => array(
'value' => 'Iniciar sesión',
'id' => 'submitbutton',
),
));
}
}
Auth.php (dentro de la carpeta Modelo, para los filtros que pueda implementar más adelante)
namespace Auth\Model;
// Add these import statements
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
class Auth implements InputFilterAwareInterface
{
public $username;
public $password;
protected $inputFilter; // <-- Add this variable
public function exchangeArray($data)
{
$this->username = (isset($data['username'])) ? $data['username'] : null;
$this->password = (isset($data['password'])) ? $data['password'] : null;
}
// Add content to these methods:
public function setInputFilter(InputFilterInterface $inputFilter)
{
throw new \Exception("Not used");
}
public function getInputFilter()
{
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$inputFilter->add(array(
'name' => 'username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
),
));
$inputFilter->add(array(
'name' => 'password',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
),
));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
}
Y Module.php, no creo que index.phtml deba publicarse aquí.
namespace Auth;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
public function getAutoloaderConfig()
{
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
}