我目前正在开发基于新版本2.0.2的第一个ZF应用程序.(我对ZF1没有任何经验)
现在我需要使用OAuth进行身份验证,我想知道是否已经有ZF2的实现.我知道有一个ZF1模块.
如果没有,你会推荐什么?使用PHP的原生OAuth支持?
谢谢你的帮助!罗伯托
我想在我的模块中的每个操作之前编写一些代码来运行.我试过挂钩,onBootstrap()但代码也运行在其他模块上.
对我有什么建议吗?
我在ZF2应用程序中拥有以下类和模块配置,并且出现以下错误:
While attempting to create applicationformuserform(alias: Application\Form
\UserForm) an invalid factory was registered for this instance type.
Run Code Online (Sandbox Code Playgroud)
UserFormFactory.php
<?php
namespace Application\Factory\Form;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Application\Form\UserForm;
class UserFormFactory implements FactoryInterface {
public function createService(ServiceLocatorInterface $serviceLocator) {
$services = $serviceLocator->getServiceLocator();
$entityManager = $services->get('Doctrine\ORM\EntityManager');
$form = new UserForm($entityManager);
return $form;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
UserForm.php
<?php
namespace Application\Form;
use Zend\Form\Form;
use Zend\InputFilter\InputFilterProviderInterface;
use Doctrine\ORM\EntityManager;
class UserForm extends Form implements InputFilterProviderInterface {
protected $entityManager;
public function __construct(EntityManager $entityManager) {
parent::__construct();
$this->entityManager = $entityManager; …Run Code Online (Sandbox Code Playgroud) 在我的zf应用程序中,我有3个模块:
而且,在我的application.ini中,我选择了一个默认模块
resources.frontController.defaultModule = "applicant"
Run Code Online (Sandbox Code Playgroud)
因此,一些控制器类的命名如下:
class IndexController extends Zend_Controller_Action /* in Applicant Module */
class Company_IndexController extends Zend_Controller_Action
class Admin_IndexController extends Zend_Controller_Action
Run Code Online (Sandbox Code Playgroud)
由于申请人是我的默认模块,因此我不需要在课程名称中使用模块名称作为前缀.
如何使用前缀方式在默认模块中命名类?
我想使用这些类名
class Applicant_IndexController extends Zend_Controller_Action
class Company_IndexController extends Zend_Controller_Action
class Admin_IndexController extends Zend_Controller_Action
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in ZendFramework-1.11.6/library/Zend/Controller/Dispatcher/Standard.php on line 248
Run Code Online (Sandbox Code Playgroud) 我正在研究一个项目,并有以下项目布局:
|Project
|-Application
|-api
|-configs
|-controllers
|-models
|-modules
|-core
|-controllers
|-models
|-views
|-Bootstrap.php
|-site1
|-site2
|-site3
|-views
|-Bootstrap.php
|-Docs
|-Library
|-Public
|-.zfproject.xml
Run Code Online (Sandbox Code Playgroud)
我在我的application.ini中使用过这个来尝试将default模块设置为core模块:
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.defaultModule = "core"
resources.frontController.defaultControllerName = "Index"
resources.frontController.defaultAction = "index"
resources.modules[] = ""
Run Code Online (Sandbox Code Playgroud)
我的问题是,由于某种原因,我不能让bootstraps在模块中工作.这几乎就像默认模块没有被改变一样.应用程序的行为就像它一样,直到我尝试加载bootstraps - 我收到此错误:
致命错误:未捕获的异常'Zend_Application_Resource_Exception',消息'找到模块的Bootstrap文件'默认为"但是引导类"在第85行的M:\ Zend_Framework\library\Zend\Application\Resource\Modules.php中找不到"Default_Bootstrap"
以此错误为前缀:
Zend_Application_Resource_Exception:为模块"default"找到Bootstrap文件,但在第85行的M:\ Zend_Framework\library\Zend\Application\Resource\Modules.php中找不到引导类"Default_Bootstrap"
谁能看到我哪里出错了?
我的Application/Bootstrap.php文件:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
Run Code Online (Sandbox Code Playgroud)
我的Application/Core/Bootstrap.php文件:
class Core_Bootstrap extends Zend_Application_Module_Bootstrap
{
}
Run Code Online (Sandbox Code Playgroud) 我是zend框架的新手,并试图获得有关代码重用性的一些见解.我肯定知道模块,但似乎有一些不确定性,什么功能应该进入模块,什么不是.
我想要完成的事情:
1)拥有可重复使用的迷你程序/小部件/插件(无论你怎么称呼它们),只需插入任何网站即可在布局或视图中执行此操作:
<?php echo $this->contactform;?>
Run Code Online (Sandbox Code Playgroud)
或者在视图中:
<?php echo $this->layout()->blog;?>
Run Code Online (Sandbox Code Playgroud)
我叫他们扩展.所以基本上你在joomla/wordpress/concrete5模板中看到了什么.
2)与该特定扩展相关的所有代码都应位于其单独的目录中.
3)我们应该只能为需要它们的某些模块/控制器输出扩展名.如果不显示它们,就不应该被不必要地渲染.
4)每个扩展可以在页面上输出多个内容区域.
如果您使用的结构/方法布局合理,请发布回复.
谢谢:)
如何让我的ZF2模块加载特定控制器的其他布局文件?
想想你IndexController和AdminController你的ZF2应用模块中和IndexController是使用layout.phtml但要使用adminlayout.phtml的AdminController.
这怎么可能?
我将ZfcUser设置为身份验证模块.该模块运行良好,除了我必须在每个操作中再次定义它:
$sm = $this->getServiceLocator();
$auth = $sm->get('zfcuser_auth_service');
if ($auth->hasIdentity()) {
fb($auth->getIdentity()->getEmail());
}
else return $this->redirect()->toRoute('zfcuser');
Run Code Online (Sandbox Code Playgroud)
我尝试将代码放入构造中,但这并没有成功.然后我检查了服务管理器,但无法正确定义所有出现的多个版本.
这是我的Module类的代码:
public function getServiceConfig() {
return array(
'factories' => array(
'Todo\Model\TodoTable' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$table = new TodoTable($dbAdapter);
return $table;
},
),
);
}
Run Code Online (Sandbox Code Playgroud)
如何正确设置服务?
zend文件application.config.php提供了一些缓存配置的方法,我发现它非常适合生产系统:
return array(
'modules' => array(
'Application',
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor'
),
'config_glob_paths' => array('config/autoload/{,*.}{global,local}.php'),
'config_cache_enabled' => true,
'config_cache_key' => md5('config'),
'module_map_cache_enabled' => true,
'module_map_cache_key' => md5('module_map'),
'cache_dir' => './data/cache',
),
);
Run Code Online (Sandbox Code Playgroud)
但是,激活会立即导致错误
Fatal error: Call to undefined method Closure::__set_state()
Run Code Online (Sandbox Code Playgroud)
这与作为闭包编写的工厂有关,如下所示:
'service_manager' => array(
'factories' => array(
'auth.service' => function($sm) {
/* hic sunt ponies */
},
),
),
Run Code Online (Sandbox Code Playgroud)
不幸的是,该 问题 只告诉我,为什么这个错误发生,但不知道如何解决它.
我如何重做这个和类似的,factories以便缓存将与他们一起工作?
我想在Zend Framework 2中创建一个与ZF2 MVC架构一起使用的通用模块/控制器/动作路由.
在ZF1中,默认路由被定义为/[:module][/:controller][/:action]模块默认为default,控制器默认为index和操作index.
现在,ZF2改变了模块的用途,从简单的控制器和视图组到真正的独立应用程序,并将控制器名称显式映射到控制器类.
由于所有控制器名称在所有模块中必须是唯一的,因此我想将它们命名为,modulename-controllername但我希望URL看起来像/modulename/controllername不需要为每个模块创建特定路由,使用类似于上述ZF1的旧默认路由.