如何在Zend Framework 3中调用Controller的模型方法

时间:2016-09-23 12:19:08

标签: php zend-framework zend-db zend-framework3

我为没有正确构建问题标题而道歉。 我正在研究zf3的骨架应用来实现acl.I无法找到如何检索相应电子邮件地址的行。我有两个控制器AlbumController.php和LoginController.php 的 AlbumController.php

validateInterval

LoginController.php

private $table;
public function __construct(AlbumTable $table)
{
    $this->table = $table;
}
public function deleteAction()
{
    $user_session=new Container('user');
    if(isset($user_session->email))
    {
      $row=$this->loginTable->getRow($user_session->email);//*Here is the problem*
        if($row['role']=='admin')
        {
            $acl=new Acl();
            if($acl->isAllowed('admin','AlbumController','delete'))
            {
                 $id = (int) $this->params()->fromRoute('id', 0);
                if (!$id) {
                    return $this->redirect()->toRoute('album');
                }
            $request = $this->getRequest();
            if ($request->isPost()) {
                $del = $request->getPost('del', 'No');

                if ($del == 'Yes') {
                    $id = (int) $request->getPost('id');
                    $this->table->deleteAlbum($id);
                }
                return $this->redirect()->toRoute('album');
            }
            return [
                'id'    => $id,
                'album' => $this->table->getAlbum($id),
            ];
    }
        }
     return $this->redirect()->toRoute('login');
     }
   }

我正在调用Model中存在的LoginTable.php的getRow()方法 LoginTable.php。但它在非对象

上调用成员函数getRow()时抛出错误

LoginTable.php

public $user_session;
public $loginTable;
public function __construct(LoginTable $loginTable)
{
 $this->loginTable = $loginTable;
}

1 个答案:

答案 0 :(得分:1)

您在 AlbumController 类中调用loginTable,但未在此控制器中定义AlbumController.php。您是在 LoginController 类中完成的,但这不是相同的对象。

AlbumController 中注入 LoginTable 实例:

<强> .... private $albumTable; private $loginTable; public function __construct(AlbumTable $albumTable, LoginTable $loginTable) { $this->albumTable= $albumTable; $this->loginTable= $loginTable; } ....

AlbumControllerFactory.php

class AlbumControllerFactory implements FactoryInterface { public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { return new AlbumController( $container->get(AlbumTable::class), $container->get(LoginTable::class) ); } } (适应您的代码):

char
相关问题