Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未执行操作_Php_Zend Framework2_Zend Route_Zend Auth_Zend Controller - Fatal编程技术网

Php 未执行操作

Php 未执行操作,php,zend-framework2,zend-route,zend-auth,zend-controller,Php,Zend Framework2,Zend Route,Zend Auth,Zend Controller,我正在创建一个Auth模块,在我的AuthController中,我有三种方法: 1.loginAction() 2.AuthenticateAction() 3.logoutAction() 问题是当我提交表单时,authoritate()方法未执行: $form->setAttribute('action', $this->url('login/process',array('action' => 'authenticate', ))); 例外情况是“我必须对该操

我正在创建一个Auth模块,在我的
AuthController
中,我有三种方法:

1.
loginAction()

2.
AuthenticateAction()

3.
logoutAction()

问题是当我提交表单时,
authoritate()
方法未执行:

$form->setAttribute('action', $this->url('login/process',array('action'     => 'authenticate', )));
例外情况是“我必须对该操作有一个看法”:

Zend\View\Renderer\PhpRenderer::render:无法呈现模板“auth/auth/authenticate”;解析程序无法解析为文件

我只需要处理提交数据的方法

loginAction()
内部,我只返回表单和消息以进行渲染,
authenticationAction
用于处理数据:

public function loginAction()
{
    //if already login, redirect to success page
    if ($this->getAuthService()->hasIdentity()){
        return $this->redirect()->toRoute('success');
    }
    $form       = $this->getForm();
    return array(
        'form'      => $form,
        'messages'  => $this->flashmessenger()->getMessages()
    );
}
public function authenticateAction()
{
    $form       = $this->getForm();
    $redirect = 'login';
    $request = $this->getRequest();
    if ($request->isPost()){
        $form->setData($request->getPost());
        if ($form->isValid()){
            //check authentication...
            $this->getAuthService()->getAdapter()
                                   ->setIdentity($request->getPost('username'))
                                   ->setCredential($request->getPost('password'));
            $result = $this->getAuthService()->authenticate();
            foreach($result->getMessages() as $message)
            {
                //save message temporary into flashmessenger
                $this->flashmessenger()->addMessage($message);
            }
            if ($result->isValid()) {
                $redirect = 'success';
                //check if it has rememberMe :
                if ($request->getPost('rememberme') == 1 ) {
                    $this->getSessionStorage()
                         ->setRememberMe(1);
                    //set storage again
                    $this->getAuthService()->setStorage($this->getSessionStorage());
                }
                $this->getAuthService()->getStorage()->write($request->getPost('username'));
            }
        }
    }
    return $this->redirect()->toRoute($redirect);
}
这里是我的路线配置:

    'login' => array(
        'type'    => 'Literal',
        'options' => array(
            'route'    => '/auth',
            'defaults' => array(
                '__NAMESPACE__' => 'Application\Controller',
                'controller'    => 'Auth',
                'action'        => 'login',
            ),
        ),
        'may_terminate' => true,
        'child_routes' => array(
            'process' => array(
                'type'    => 'Segment',
                'options' => array(
                    'route'    => '/[:action]',
                    'constraints' => array(
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                    ),
                ),
            ),
        ),
    ),
#0 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-view\src\View.php(205): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel))
#1 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-view\src\View.php(233): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#2 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-view\src\View.php(198): Zend\View\View->renderChildren(Object(Zend\View\Model\ViewModel))
#3 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-mvc\src\View\Http\DefaultRenderingStrategy.php(103): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#4 [internal function]: Zend\Mvc\View\Http\DefaultRenderingStrategy->render(Object(Zend\Mvc\MvcEvent))
#5 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-eventmanager\src\EventManager.php(444): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#6 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-eventmanager\src\EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('render', Object(Zend\Mvc\MvcEvent), Array)
#7 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-mvc\src\Application.php(353): Zend\EventManager\EventManager->trigger('render', Object(Zend\Mvc\MvcEvent))
#8 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-mvc\src\Application.php(328): Zend\Mvc\Application->completeRequest(Object(Zend\Mvc\MvcEvent))
#9 D:\xampp\htdocs\AddskProject\public\index.php(21): Zend\Mvc\Application->run()
#10 {main}
有没有办法不为每个操作定义特定的
视图
?我真的不需要查看此
authenticationaction()

堆栈跟踪:

    'login' => array(
        'type'    => 'Literal',
        'options' => array(
            'route'    => '/auth',
            'defaults' => array(
                '__NAMESPACE__' => 'Application\Controller',
                'controller'    => 'Auth',
                'action'        => 'login',
            ),
        ),
        'may_terminate' => true,
        'child_routes' => array(
            'process' => array(
                'type'    => 'Segment',
                'options' => array(
                    'route'    => '/[:action]',
                    'constraints' => array(
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                    ),
                ),
            ),
        ),
    ),
#0 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-view\src\View.php(205): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel))
#1 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-view\src\View.php(233): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#2 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-view\src\View.php(198): Zend\View\View->renderChildren(Object(Zend\View\Model\ViewModel))
#3 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-mvc\src\View\Http\DefaultRenderingStrategy.php(103): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#4 [internal function]: Zend\Mvc\View\Http\DefaultRenderingStrategy->render(Object(Zend\Mvc\MvcEvent))
#5 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-eventmanager\src\EventManager.php(444): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#6 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-eventmanager\src\EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('render', Object(Zend\Mvc\MvcEvent), Array)
#7 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-mvc\src\Application.php(353): Zend\EventManager\EventManager->trigger('render', Object(Zend\Mvc\MvcEvent))
#8 D:\xampp\htdocs\AddskProject\vendor\zendframework\zend-mvc\src\Application.php(328): Zend\Mvc\Application->completeRequest(Object(Zend\Mvc\MvcEvent))
#9 D:\xampp\htdocs\AddskProject\public\index.php(21): Zend\Mvc\Application->run()
#10 {main}

乍一看,您的代码看起来正常,应该可以工作(如果您通过
$this->redirect()返回重定向响应)
不需要视图,您也不必自己禁用它。我看到的一个问题是,您在表单操作中使用的是
/login/process
,而不是
登录/authenticate
。您确定您在表单中使用的是
POST
,而不是
GET
?谢谢您的回答。
>/登录/处理
指向我的路线和路线侦听[/:操作]。默认情况下,ZF2中的是POST。我将在
isPost()中检查
die()
是否使用了它的
POST
方法。那么
$redirect
值是什么?它是否会在
return
语句中结束?