问题描述
所以,我要按照
https://zf2.readthedocs.org/en/最新的/用户指南/skeleton-application.html
我只是将相册"模块替换为验证"模块,并使用示例代码进行Ldap验证
I just replace the 'Album' module with a 'Auth' module and use the sample code for Ldap autentication
https://zf2.readthedocs.org/zh_CN/latest/modules/zend.authentication.adapter.ldap.html
但是当我提交带有登录数据的表单时,Zend无法找到Ldap类,但出现此错误.
but i'm getting this error where Zend can't find the Ldap class when i submit the form with the login data.
致命错误:在第139行的C:\ wamp \ www \ sade \ vendor \ zendframework \ zend-authentication \ src \ Adapter \ Ldap.php中找不到类'Zend \ Ldap \ Ldap'
Fatal error: Class 'Zend\Ldap\Ldap' not found in C:\wamp\www\sade\vendor\zendframework\zend-authentication\src\Adapter\Ldap.php on line 139
我正在使用composer,用于zend框架和用于模块的atuoloader,我已经遇到了与找不到一个类有关的错误,但我自己的类,而不是Ldap之类的Zend类.
I'm using composer, for the zend framework and the atuoloader for the modules, i already have errors related a class not found but my own classes, not Zend classes like Ldap.
谢谢.
这是文件和文件夹的结构
Here is the structure of the files and folders
/module
/Auth
/config
module.config.php
/src
/Auth
/Controller
AuthController.php
/Form
AuthForm.php
/Model
Auth.php
/view
/auth
/auth
index.php
Module.php
以及模块的主要代码:
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 (位于模型"文件夹中,用于我稍后可能实现的过滤器)
Auth.php (inside Model folder, for filters that i may implement later)
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;
}
}
还有Module.php ,我认为index.phtml不需要在此处发布.
And Module.php, i don't think that index.phtml needs to be posted here.
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';
}
}
默认安装中不再包含
推荐答案
Zend\Ldap
.由于ZendFramework-Team已将zendframework分为多个组件,因此不再需要全部组件.而且Zend\Ldap
是不需要的"之一,因为它对ext/ldap
有严格的依赖性,因为没有PHP的LDAP扩展就无法使用它.有关详细信息,请参见 https://github.com/zendframework/zf2/issues/7569
Zend\Ldap
is not included any more in a default installation. As the ZendFramework-Team has splitted the zendframework into multiple components not all of them are needed any more. And Zend\Ldap
is one of the "not needed" ones as it has a hard dependency on ext/ldap
as you can't use it without the LDAP-extension of PHP. For details on that have a look at https://github.com/zendframework/zf2/issues/7569
因此,您应该从项目的基本目录中运行composer require zendframework/zend-ldap
,并且应该已启动并正在运行.现在,安装后您将获得建议.
You should therefore run composer require zendframework/zend-ldap
from the base-directory of your project and you should be up and running. By now you get that as a suggestions after the installation.
zendframework/zendframework suggests installing zendframework/zend-ldap (zend-ldap component ~2.5.0, if you need LDAP features)
这篇关于ZendFatal错误:找不到类'Zend \ Ldap \ Ldap'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!