ZendFramework Хелп
Zend_Loader::loadClass('Zend_Controller_Action');
require_once 'Zend/Auth/Adapter/Interface.php';
class MyAuth implements Zend_Auth_Adapter_Interface {
public function __construct($username, $password) {
}
public function authenticate() {
return Zend_Auth_Result::SUCCESS;
}
}
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
require_once "Zend/Auth.php";
$auth = Zend_Auth::getInstance();
$adapter = new MyAuth("admin","admin");
$result = $auth->authenticate($adapter);
}
public function noRouteAction()
{
$this->_redirect('/');
}
}
?>
На странице выползает такое :
Fatal error: Call to a member function isValid() on a non-object in D:\localserver\server\xampp\htdocs\zf\application\library\Zend\Auth.php on line 120
Что это может быть? :\
где line 120?
Zend_Loader::loadClass('Zend_Controller_Action');
require_once 'Zend/Auth/Adapter/Interface.php';
class MyAuth implements Zend_Auth_Adapter_Interface {
private $user,$pass;
public function __construct($username, $password) {
$this->user=$username; $this->pass=$password;
}
public function authenticate() {
$messages[] = 'Password incorrect';
$code = $this->user=="admin"&&$this->pass=="admin" ? Zend_Auth_Result::SUCCESS : Zend_Auth_Result::FAILURE;
return new Zend_Auth_Result($code,Zend_Auth_Result::getIdentity(),$messages);
}
}
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
require_once "Zend/Auth.php";
$auth = Zend_Auth::getInstance();
// $adapter = new MyAuth("admin","addmin"); //FAILURE
$adapter = new MyAuth("admin","admin"); //SUCCESS
$result = $auth->authenticate($adapter);
if (!$result->isValid()) {
foreach ($result->getMessages() as $message)
echo "$message\n";
} else echo 'Authentication OK';
}
public function noRouteAction()
{
$this->_redirect('/');
}
}
?>
Проблема была в том, что я возвращал константу Zend_Auth_Result::SUCCESS, а нужно было возвратить объект Zend_Auth_Result.
Прочитал мануал http://framework.zend.com/manual/ru/zend.auth.adapter.http.html но че-т не пашет :(
Поделитесь исходником плз.
в том то и дело что ващще не работает :)
лучше покажи исходник аутентификации которая работает.
ЗЫ Просто я не понял что делать с переменными $response и $request. что в них ложить и вообще принцип построение этой аутентификации.
Вот мой код:
$config = array(
'accept_schemes' => 'digest',
'realm' => 'My Web Site',
'digest_domains' => '/zf/index/digest',
'nonce_timeout' => 3600,
);
require_once 'Zend/Auth/Adapter/Http.php';
$adapter = new Zend_Auth_Adapter_Http($config);
require_once 'Zend/Auth/Adapter/Http/Resolver/File.php';
$digestResolver = new Zend_Auth_Adapter_Http_Resolver_File();
$digestResolver->setFile('realm');
$adapter->setDigestResolver($digestResolver);
assert($request instanceof Zend_Controller_Request_Http);
assert($response instanceof Zend_Controller_Response_Http);
$adapter->setRequest($request);
$adapter->setResponse($response);
$result = $adapter->authenticate();
if (!$result->isValid()) {
echo "baaad";
}
}
Вылазят такие ошибки :
Warning: assert() [function.assert]: Assertion failed in D:\localserver\server\xampp\htdocs\zf\application\controllers\IndexController.php on line 71
Warning: assert() [function.assert]: Assertion failed in D:\localserver\server\xampp\htdocs\zf\application\controllers\IndexController.php on line 72
Fatal error: Argument 1 passed to Zend_Auth_Adapter_Http::setRequest() must not be null, called in D:\localserver\server\xampp\htdocs\zf\application\controllers\IndexController.php on line 74 and defined in D:\localserver\server\xampp\htdocs\zf\application\library\Zend\Auth\Adapter\Http.php on line 311
Что нужно ложить/принимать в переменные $response и $request?
ман прочти до конца там они используются.
$request = new Zend_Controller_Request_Http(); //+++
$response = new Zend_Controller_Response_Http(); //+++
assert($request instanceof Zend_Controller_Request_Http);
assert($response instanceof Zend_Controller_Response_Http);
если вставить эти строки (+++), то тож не пашет. :(
в мане тож по этому поводу ниче не сказано.
перелапатил все сорцы классов Zend'a епт! чуть с ума не сошел!
Но код все-таки добил :
require_once "Zend/Auth.php";
$config = array(
'accept_schemes' => 'digest',
'realm' => 'My Web Site',
'digest_domains' => '/zf/index/digest',
'nonce_timeout' => 3600,
);
require_once 'Zend/Auth/Adapter/Http.php';
$adapter = new Zend_Auth_Adapter_Http($config);
require_once 'Zend/Auth/Adapter/Http/Resolver/File.php';
$digestResolver = new Zend_Auth_Adapter_Http_Resolver_File();
$digestResolver->setFile('realm');
$adapter->setDigestResolver($digestResolver);
$adapter->setRequest(Zend_Controller_Front::getInstance()->getRequest());
$adapter->setResponse($this->getResponse());
$result = Zend_Auth::getInstance()->authenticate($adapter);
if (!$result->isValid()) {
echo "baaad";
}
}
ЗЫ Походу здесь никто в зенде и не чехлит, т.к. хелпа никакого не поступает. мда... :(
1. смысл тогда форума если в нем не хотят давать ответов?
2. если ты считаешь, что я задал настолько простой вопрос, то почему не видно ни одного дельного ответа? я тоже могу послать кого угодно в ман.
3. если тебе данный материал знаком так почему не поделиться опытом с другими?
... а ну да! я забыл! мне ж надо идти читать ман! :D :D :D
ЗЫ надеюсь ты понимаешь, что пошел откровенный оффтоп и выяснять кто знает а кто нет - глупо. по-моему лучше вообще не отвечать, чем методично посылать в ман - и это уже с твоей стороны неуважение :\
Тип аргумента указывается ПЕРЕД аргументом:
[COLOR=#0000bb]assert[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]instanceof Zend_Controller_Request_Http $request[/COLOR][COLOR=#007700]);[/COLOR]
[COLOR=#007700][/COLOR]
А на самом деле, можно и просто assert($request);
>>если тебе данный материал знаком так почему не поделиться опытом с другими?
А ты считаешь уважением с твоей стороны просить переписать тебе тут то, что и так чёрным по белому написано в мане?
>>если тебе данный материал знаком так почему не поделиться опытом с другими?
А ты считаешь уважением с твоей стороны просить переписать тебе тут то, что и так чёрным по белому написано в мане?
мда... оффтоп по ходу рулит! :D
это оператор проверки принадлежности к классу. Его синтаксис :
$thing instanceof SomeClass
А на самом деле, можно и просто assert($request);
мы утверждаем, что $request и $response являются экземплярами классов Zend_Controller_Request_Http и Zend_Controller_Response_Http соответственно. думаю это используется в целях отладки.