- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试了其他帖子和示例中的一些想法,但我仍然没有解决方案。
我无法在我的模型中收到服务定位器。
我的 Module.php 在函数 getServiceConfig() 中包含以下工厂:
'Backend\Model\Beuser' => function($sm){
$serviceLocator = $sm->getServiceLocator();
return new \Backend\Model\Beuser($serviceLocator);
},
namespace Backend\Model;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class Beuser implements ServiceLocatorAwareInterface
{
public $idx_be_user;
public $be_user_email;
public $be_user_password;
public $be_user_firstname;
public $be_user_lastname;
public $be_user_phone;
public $be_user_photo;
public $be_user_shorttext;
protected $inputFilter;
protected $serviceLocator;
public function setServiceLocator(ServiceLocatorInterface $sl)
{
$this->serviceLocator = $sl;
return $this;
}
public function getServiceLocator()
{
return $this->serviceLocator;
}
public function exchangeArray($data)
{
$this->idx_be_user = (!empty($data['idx_be_user'])) ? $data['idx_be_user'] : null;
$this->be_user_email = (!empty($data['be_user_email'])) ? $data['be_user_email'] : null;
$this->be_user_password = (!empty($data['be_user_password'])) ? $data['be_user_password'] : null;
$this->be_user_firstname = (!empty($data['be_user_firstname'])) ? $data['be_user_firstname'] : null;
$this->be_user_lastname = (!empty($data['be_user_lastname'])) ? $data['be_user_lastname'] : null;
$this->be_user_phone = (!empty($data['be_user_phone'])) ? $data['be_user_phone'] : null;
$this->be_user_photo = (!empty($data['be_user_photo'])) ? $data['be_user_photo'] : null;
$this->be_user_shorttext = (!empty($data['be_user_shorttext'])) ? $data['be_user_shorttext'] : null;
}
public function getArrayCopy()
{
return get_object_vars($this);
}
public function setInputFilter(InputFilterInterface $inputFilter)
{
throw new \Exception("Not used");
}
public function getInputFilter()
{
var_dump($this->getServiceLocator());
die();
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'idx_be_user',
'required' => true,
'filters' => array(
array('name' => 'Int'),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'be_user_email',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
/*
array(
'name' => 'Db\NoRecordExists',
'options' => array(
'table' => 'users',
'field' => 'email',
// 'adapter' => $this->getServiceLocator()->get('dbAdapter'),
),
),
*/
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'be_user_password',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 6,
'max' => 100,
),
),
),
)));
$inputFilter->add($factory->createInput(array(
'name' => 'be_user_firstname',
'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($factory->createInput(array(
'name' => 'be_user_lastname',
'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($factory->createInput(array(
'name' => 'be_user_phone',
'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(
$factory->createInput(array(
'name' => 'be_user_photo',
'required' => false,
))
);
$inputFilter->add($factory->createInput(array(
'name' => 'be_user_shorttext',
'required' => false,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 5,
'max' => 255,
),
),
),
)));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
}
var_dump($this->getServiceLocator());
返回 NULL。这就是为什么调用
$this->getServiceLocator()->get('something')
的原因。
PHP Fatal error: Call to a member function get()[...]
'Backend\Model\Beuser' => function($sm){
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$beuser = new \Backend\Model\Beuser();
$beuser->setDbAdapter($dbAdapter);
return $beuser;
},
namespace Backend;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\Authentication\Storage;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\Authentication\AuthenticationService;
use Zend\Authentication\Adapter\DbTable as AuthAdapter;
use Zend\Authentication\Result as Result;
use Zend\Session\Container; // We need this when using sessions
//Be User
use Backend\Model\Beuser;
use Backend\Model\BeuserTable;
class Module implements AutoloaderProviderInterface
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php'
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getServiceConfig()
{
return array(
//factories
'factories'=>array(
//Storage
'BackendStorage' => function($sm){
return new BackendStorage('backend');
},
//DB Adapter
'dbAdapter' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
return $dbAdapter;
},
//nur DB
'db' => function($sm) {
$dba= $sm->get('dbAdapter');
$db = new db\Db($dba);
return $db;
},
//mache Auth Info verfuegbar
'AuthService' => function($sm) {
//$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$dbTableAuthAdapter = new AuthAdapter($sm->get('dbAdapter'),'tbl_be_user','be_user_email','be_user_password', 'MD5(?)');
//$authService = new AuthenticationService();
$authService = new AuthenticationService(new Storage\Session('Auth_Backend'));
$authService->setAdapter($dbTableAuthAdapter);
return $authService;
},
//Navigation
'NavigationFactory' => 'Backend\Service\NavigationFactory',
// Backend User
'Backend\Model\BeuserTable' => function($sm) {
$tableGateway = $sm->get('BeuserTableGateway');
$table = new BeuserTable($tableGateway);
return $table;
},
'BeuserTableGateway' => function ($sm) {
$dbAdapter = $sm->get('dbAdapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Beuser());
return new TableGateway('tbl_be_user', $dbAdapter, null, $resultSetPrototype);
},
'Backend\Model\Beuser' => function($sm){
$model = new \Backend\Model\Beuser();
$model->setServiceLocator($sm);
return $model;
},
),
);
}
public function getViewHelperConfig()
{
return array(
'invokables' => array(
'PageTitle' => 'Backend\ViewHelper\PageTitle',
),
'factories' => array(
//hasIdentity true or false
'AuthStatusFactory' => function ($serviceManager) {
// Get the service locator
$serviceLocator = $serviceManager->getServiceLocator();
// pass it to your helper
return new \Backend\ViewHelper\AuthStatusFactory($serviceLocator);
},
'BeUserName' => function ($serviceManager) {
// Get the service locator
$serviceLocator = $serviceManager->getServiceLocator();
// pass it to your helper
return new \Backend\ViewHelper\BeUserName($serviceLocator);
},
)
);
}
}
最佳答案
您通过不存在的构造函数将其传递...只需使用 setter 。 Service Manager 实现 ServiceLocatorInterface,只需将其传递给您的模型。
更改您的服务配置:
'Backend\Model\Beuser' => function($sm){
$model = new \Backend\Model\Beuser();
$model->setServiceLocator($sm);
return $model;
},
public function testAction()
{
// The service manager will then inject itself into your model
// when it is instantiated.
$myModel = $this->getServiceLocator()->get('Backend\Model\Beuser');
// now you have the Service Locator injecte4d into your model ..
//var_dump($myModel->getServiceLocator());
}
'BeuserTableGateway' => function ($sm) {
$dbAdapter = $sm->get('dbAdapter');
$resultSetPrototype = new ResultSet();
// Beuser will not have the service locator injected below..
// and will return null if the object wasn't created via the service manager.
//$resultSetPrototype->setArrayObjectPrototype(clone $sm->get('Backend\Model\Beuser'));
$resultSetPrototype->setArrayObjectPrototype(new Beuser());
return new TableGateway('tbl_be_user', $dbAdapter, null, $resultSetPrototype);
},
关于zend-framework2 - zf2 : how to get Service Locator in Model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17443125/
我正在使用 choronos,它建议使用 start/stop 命令开始停止,如下所示 开始计时 停止计时 但是,我正在编写 puppet manifest,它只适用于下面的服务命令。 服务计时开始
来历及作用 services.exe进程程序文件是由微软公司为其发布的Windows操作系统定义的一个系统进程,常见于Windows 2000/XP/Vista/2007等系统中,被描述为服务和控
我一直在尝试使用installutil:installutil /u GSIS.FileMoverService.exe安装Windows服务。 我得到的输出是: Uninstalling assem
如果一个域有多个团队和多个 Web 应用程序,那么注册 Service Worker 来管理整个站点的最佳建议是什么?具有范围的顶级服务 worker /或子域中的多个服务 worker ?由于一个域
我已经在 eclipse 中创建了企业项目。动态web项目和ejb项目对企业项目有借鉴意义。当我运行管理员(企业项目)运行时选择 wildfly 服务器 18。我收到以下错误。谁能告诉我我错过了什么。
我已经使用 apache-cxf-2.7.4 创建了一个 Web 服务。我进入了我的项目中制作的类(class)。我的项目中的库是: math3-commons-3.2.jar XStream-1.4
我在域中的 Virtual Box 中运行集群计算机,默认情况下服务在 Network 服务下运行,服务一直停止,事件日志中出现以下错误。 请从下面的错误日志中查找错误详细信息。任何帮助都会很棒。 L
在我的应用程序中,用户可以在 map 上发布事件。应用程序的入口点是一个无状态的 web api 服务。为了在内部代表用户,我想要一个用户服务。我应该何时使用 Reliable Stateful Ac
当我尝试运行在WIX中创建的安装程序时,出现以下错误消息: “服务'Report Generator Service'(报告生成器服务)无法启动。请验证您是否具有启动系统服务的足够特权”。 我已经在这
尝试使用 cloudformation 创建 ECS 服务(在 Fargate 上)但出现错误: Invalid service in ARN (Service: AmazonECS; Status
我正在编写一个简单的Windows服务,该服务每个月向所有员工发送一封电子邮件。我的问题是,完成后如何停止自我?我是该领域的新手,请帮帮我。非常感谢。 它将部署在服务器上以每月运行。我没有开始做这件事
有谁知道是否有办法在 service worker 中获取此号码或日期: 将我的服务 worker 缓存命名为 cache-1182 会很方便或 cache-20171127171448 我想在安装事
我想开始使用 Azure Service Fabric 技术。 我按照this document工作并安装最新的SDK。安装后,我打开 PowerShell(“以管理员身份运行”)命令行窗口并写入这些
我在使用 whenever gem 时遇到了一些问题。我创建了一个 rake 任务,当我自己启动它时它工作得很好但是当我在日志中收到以下消息时尝试自动执行它: ActiveRecord::Statem
我想在 service fabric 集群中为两个不同的 web 应用程序(webpi/website)共享 http/80 端口,应用程序必须有 2 个不同的主机名: mywebapi.com 和
我创建了一个使用 MongoDB 实现 hibernate OGM 的应用程序。它在 Eclipse 中运行得很好,但是,当我构建一个 fat jar 并尝试运行它时,出现以下错误: Exceptio
我有一个 Selenium Python 测试套件。它开始运行,但几分钟后抛出以下错误: Exception AttributeError: "'Service' object has no attr
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”Web 服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时,我都会收到 NullPointerExceptio
我正在尝试为我的网站使用后台定期同步。我正在使用 localhost 并在 1*1000 毫秒时注册 periodicsync 事件,但这根本不会触发。 我看过这个demo ,但即使我将该网站安装为应
我是一名优秀的程序员,十分优秀!