天道酬勤,学无止境

Zend 应用程序和引导程序作为非 mvc(Zend application and bootstrap as non mvc)

问题

是否可以将 zend_application 和 zend_bootstrap 用作非 mvc? 我想使用它们但没有 zend_view。

回答1

是的你可以。

如果您不想使用 zend 视图,有几种方法

  1. 不要调用 zend 应用程序的 run() 方法,因此请求不会命中您的 zend 控制器,并且不会实例化 zend 视图:

    $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH .'/configs/application.ini');

    $application->bootstrap();

  2. 在控制器上禁用视图渲染和布局

    $this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout()->disableLayout();
回答2

是的,只需从 application.ini 中剥离适当的资源部分

更多细节

  • Zend 应用 - 操作原理

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用Zend Framework创建cronjob(Create cronjob with Zend Framework)
    问题 我试图编写一个cronjob控制器,所以我可以调用一个网站,并执行所有模块cronjob.php。 现在我的问题是我该怎么做? 可以选择curl,这样我也可以计算错误和成功吗? [更新] 我想我还没有解释清楚。 我想要做的是有一个文件,我可以从http:// server / cronjob中调用该文件,然后使它执行每个/application/modules/*/controller/CronjobController.php或采用另一种方法来执行, cronjobs不在模块所在的位置,而是在同一位置。 这将为我提供一个优势,即如果某个模块不存在,则它不会尝试运行其cronjob。 现在我的问题是,您将如何执行CronjobController的所有模块,还是采用完全不同的方式使其仍保持模块化? 而且我希望能够给出成功完成了多少cronjob和没有成功完成cronjob的数量 回答1 经过一些研究和大量拖延,我得出一个简单的结论,即ZF格式的cron脚本应包含zend framework应用程序的所有功能-而不包含所有视图内容。 我是通过在应用程序目录中创建一个新的cronjobfoo.php文件来实现的。 然后,我从以下项中获得了最低限度的收益:-我的前端控制器(index.php)-我的bootstrap.php 我拿走了所有视图内容,并专注于保持环境设置,数据库设置
  • 如何将额外的参数传递给 routeMatch 对象?(How can I pass extra parameters to the routeMatch object?)
    问题 我正在尝试对控制器进行单元测试,但无法弄清楚如何将一些额外的参数传递给 routeMatch 对象。 我在 http://devblog.x2k.co.uk/unit-testing-a-zend-framework-2-controller/ 和 http://devblog.x2k.co.uk/getting-the- 上关注了 tomoram 的帖子servicemanager-into-the-test-environment-and-dependency-injection/,但是例如,当我尝试向 /album/edit/1 发送请求时,它会引发以下异常: Zend\Mvc\Exception\DomainException: Url plugin requires that controller event compose a router; none found 这是我的 PHPUnit 引导程序: class Bootstrap { static $serviceManager; static $di; static public function go() { include 'init_autoloader.php'; $config = include 'config/application.config.php'; // append some
  • 将外部脚本与Zend Framework集成(Integrating external scripts with Zend Framework)
    问题 将外部脚本集成到Zend框架中的最佳方法是什么? 让我解释一下,因为我可能会问这个错误的方式。 我有一个下载和解析XML文件的脚本。 该脚本作为日常cron作业运行,需要将其数据转储到数据库中。 我在使用该脚本的网站上使用Zend Framework,在我看来,最好使用我的Zend_Db_Abstract子类化模型进行数据库的添加和更新。 如何做到这一点? 我的脚本是否进入Zend组件旁边的库中(即library / Mine / Xmlparse.php),从而可以访问各种ZF组件吗? 我是否只需要在文件本身中包含正确的模型文件和Zend DB组件? 处理这种集成的最佳方法是什么? 回答1 在您的库目录中,您应该在Zend库文件夹旁边有自己的库。 无论您使用什么名称(Mylib,Project等),都应将其包含在Zend Autoloader中,操作如下: require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->registerNamespace('Project_'); $loader->setFallbackAutoloader(true); if ($configSection == 'development') {
  • zend框架中的模块配置和布局配置(Module configuration and layout configuration in zend framework)
    问题 我从其他文章中获得了一些代码,用于在zend框架中配置模块和布局。 我在本地尝试过。 我没有默认和管理模块的不同布局。 这是我的代码,用于为zend框架配置模块和布局。 configs / application.ini [production] # Debug output phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 # Include path includePaths.library = APPLICATION_PATH "/../library" # Bootstrap bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" admin.bootstrap.path = APPLICATION_PATH "/modules/admin/Bootstrap.php" admin.bootstrap.class = "admin_Bootstrap" # Front Controller resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources
  • 从Zend Framework 1逐步迁移到2(Step by step migration from Zend Framework 1 to 2)
    问题 我必须将应用程序从Zend Framework 1.12.0迁移到版本2。似乎还没有迁移指南。 我已经研究过ZF2编码约定,并采用了依赖注入(Zend \ Di)和PHP 5.3命名空间。 我的目标是将ZF1应用程序重构为ZF2模块。 问题:是否有可能在每个步骤之后逐步进行至少部分工作的应用程序,并避免大量的重构步骤? 是,请问该如何处理? 这是我逐步进行迁移的想法,但是我不知道在每一步之后是否最终都可以使用可运行的应用程序: 首先设置ZF2 Skeleton应用程序设置一个新模块(MyApp),并将ZF1应用程序的内容重新组织到MyApp模块文件夹结构中。 然后设置非常基本的配置并进行引导,并通过从ZF2 AbstractActionController对其进行扩展来迁移IndexController。 模型(Zend_Db)和视图(Zend_View)将在以后迁移。 这里的目标是要有一个工作正常的IndexController :: indexAction,它没有太多的依赖关系。 设置更多配置和引导程序(路由,翻译,区域设置,缓存,Db,Acl,ViewHelpers等)。 我想先设置这些组件的ZF1版本,然后再逐一迁移。 迁移其他控制器,并使用Zend \ Di或使用ServiceManager将依赖项注入设置为控制器。
  • 从命令行运行Zend Framework操作(Running a Zend Framework action from command line)
    问题 我想运行一个Zend Framework操作来从命令行生成一些文件。 这可能吗?我需要对使用ZF的现有Web项目进行多少更改? 谢谢! 回答1 实际上,它比您想象的要容易得多。 引导程序/应用程序组件和您现有的配置可以与CLI脚本一起重用,同时避免了MVC堆栈和HTTP请求中调用的不必要的权重。 这是不使用wget的优点之一。 按照您的公共index.php启动脚本: <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); require_once 'Zend/Application.php'; $application = new Zend_Application( APPLICATION_ENV
  • Zend 框架布局(Zend Framework Layout)
    问题 我从 Zend Framework 开始,我想了解 Bootstrap 文件。 我已经了解到所有_init方法都是默认执行的,但对我来说似乎很困惑。 反正这不是我想问的。 出现了$this->bootstrap('layout'); 行动,我不确定我是否理解这一点。 这是 application.ini 文件中的 resource.layout 变量吗? 我想真正深入了解引导过程。 我要求你一步一步的解释。 提前致谢! 所以这是我的引导文件: class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH )); return $moduleLoader; } function _initViewHelpers() { $this->bootstrap('layout'); $layout = $this->getResource('layout'); $view = $layout->getView(); $view-
  • Zend 框架中的常见常量变量(common constant variables in Zend Framework)
    问题 创建包含所有应用程序常量变量的类的最佳位置在哪里? 是吗: - Bootstrap -在应用程序公共库中 例如:1-当我从数据库中检索图像名称时,如果此记录没有图像,我想在某处放置一个默认值,以便我可以在我的模型中使用它 ** 我在所有应用程序中使用的常量,因此如果我更改它,我不想回到我的代码中的所有内容并在任何地方更改它 回答1 application.ini 是最好的地方,例如在那里定义一些常量 constants.PUBLIC_PATH = APPLICATION_PATH "/../public/" constants.THEME = blue 然后在你的引导程序中做 protected function setConstants($constants) { foreach($constants as $name => $value) { if(!defined($name)) define($name, $value); } } ZF 从配置中获取“常量”并在引导程序中调用 setConstants 方法,传递所有以常量为前缀的行,因此它是一个数组。 回答2 我尽量不使用常量,而更喜欢类常量而不是全局常量。 但是,当常量不可避免时,无论出于何种原因,我都会使用 .ini 配置文件和 Bootstrap/library/model 类常量。 .ini 配置常量示例
  • nginx 上的 Zend 框架(Zend Framework on nginx)
    问题 我一直在工作的基于 Zend Framework 的站点现在正在迁移到它的生产服务器。 这个服务器原来是 nginx(惊喜!)。 该站点自然无法正常工作,因为它是在 Apache 上开发的,并且依赖于 htaccess 文件。 我的问题是……有人有这方面的经验吗? 关于如何将 htaccess 文件的功能转换为 nginx.conf 文件的任何想法? 我正在研究这个,但我希望有人已经有这方面的经验。 谢谢! 编辑:这是当前的 htaccess: RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ /index.php [NC,L] 回答1 我知道这是一个很旧的线程,但无论如何它可能会帮助一些人。 基本上它将任何 404 错误重定向到 index.php,但如果文件存在(类型文件),它将设置正确的根。 我是从头顶做的。 它可能无法立即工作,您必须放置正确的路径和 fastcgi 配置。 我也把所有东西都放回 index.php 因为它应该像 Zend_Framework 一样工作
  • Zend 不自动加载模型(Zend not autoloading models)
    问题 好吧,这让我发疯了! 我有一个目录结构如下: application - modules -- default --- controllers --- models ---- DbTable ---- Cachmapper.php --- views 我的配置文件看起来像这样 [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" resources.modules[] = 该应用程序似乎工作,如果我导航到本地主机,它正确地转到索引控制器。 但是,出于某种原因,它拒绝加载任何模型。 致命错误:在 ................................/application/modules/default/controllers/ 中找不到“Model
  • Zend 框架模块无法找到/加载模型(Zend Framework Modules can't find/load Models)
    问题 由于某些令人沮丧的原因,我配置了一些模块,它们似乎工作正常,但是我无法加载模块模型。 如果我将模型移动到它们加载的默认值,但我无法让框架在本地找到它们.. 例子: 我的模块目录是: application\modules\books\models\books.php (books 是我的模型) class Application_Module_Books_Model_Books extends Zend_Db_Table_Abstract {} 我也试过了。。 Books_Model_Books、Model_Books、books、Modules_.. 你说出来我试过了 :) 我的控制器在 Books 模块中,是一个索引控制器,它永远找不到本地模型。 我正在使用 Application.ini,它是这样配置的: resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 1 resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 我在模块目录中有一个引导程序: 类 Admin
  • ZF包含路径(ZF Include path)
    问题 require_once是否正确? 您在哪里以及如何将其包含路径? 它不应该在application.ini或bootstrap中吗? 例子: require_once 'Zend/View/Helper/Abstract.php'; // @question - is this correct - where and // how would you put it include path class Zend_View_Helper_Translate extends Zend_View_Helper_Abstract { } 回答1 一般来说,通过适当地使用Zend_Loader_Autoloader几乎可以完全避免require_once调用。 当然,关键是“适当的”。 通常,您的public/index.php将include_path设置为library文件夹。 然后,如果您使用的是Zend_Application ,那么将注册Zend_Loader_Autoloader来查找其名称空间前缀已使用application/configs/application.ini的autoloadernamespaces数组注册的任何PSR-0兼容类。 棘手的部分是针对在文件中定义的“不在include_path上”的类,例如出现在application/models
  • 处理每个页面浏览所需的应用程序范围数据的正确方法(Correct way to deal with application-wide data needed on every pageview)
    问题 我目前正在参与开发一个更大的用 PHP 编写的 web 应用程序,它基于一个 MVC 框架,在体系结构方面与 Zend 框架有很多相似之处。 当用户登录时,我有一个地方应该显示当前用户虚拟点的余额。 这个显示需要在每个控制器的每个页面上。 您将用于获取侧面模型数据的代码放在哪里,这不是特定于控制器的,而是需要在每个页面视图中进入站点范围的布局,独立于当前控制器? MVC 或 ZF 负责人将如何做到这一点? 你们其他人呢? 我想在用户登录时加载余额并将其存储在会话中,但由于经常更改余额,这似乎不正确 - 几乎需要在每次页面加载时检查和更新。 我还考虑通过向每个控制器添加获取例程来实现它,但这似乎也不正确,因为它会导致代码重复。 回答1 好吧,您说得对,为每个控制器设置例程将是代码重复,并且不会使您的代码可重用。 与您的问题评论中建议的不同,我不会选择基本控制器,因为基本控制器不是一个好的做法(在大多数情况下),并且 Zend Framework 实现了Action Helpers来避免它们。 如果您的局部视图是站点范围的,为什么不编写自己的自定义视图助手并从您的视图助手中获取模型中的数据? 然后你可以直接从你的布局调用这个视图助手。 在我看来,只要您不更新/编辑这些数据,通过模型从视图中获取数据根本不会破坏 MVC 设计模式。 您可以在/view/helpers
  • 实用的Zend_ACL + Zend_Auth实施和最佳实践(Practical Zend_ACL + Zend_Auth implementation and best practices)
    问题 语境: 我的问题与我正在像SO这样开发的论坛有关,那里有: 有权查看主题但无法回复或投票的访客拥有足够代表的成员可以编辑/投票其他线程,并且默认情况下,他们可以答复并具有与来宾相同的特权几乎可以做任何事情的管理员 我希望将此ACL应用于整个站点,并且默认情况下拒绝所有资源。 我阅读了使用Zend_Acl的基础知识-在此,您基本上创建了角色(guest,member,admin),并拒绝或允许资源(控制器,方法)用于这些角色。 该文档不是非常具体地说明如何在应用程序中实际实现ACL代码,因此我开始研究SO。 从marek那里得到了一个非常有用的stackoverflow答案,这为这个问题提供了一些启示,但是由于我的不熟悉,我仍然无法完全理解如何正确地实现最佳实践。 configAcl.php在应用程序根目录中有一个静态文件configAcl.php ,用于初始化acl对象,添加角色,从每个控制器中创建资源,为admin提供对所有内容的访问权限,对除admin所有内容具有normal访问权限并将acl对象存储在注册表以供以后使用。 $acl = new Zend_Acl(); $roles = array('admin', 'normal'); // Controller script names. You have to add all of them if
  • 为 Zend 应用程序提供数据库处理程序的“正确”方式是什么(What is the “right” Way to Provide a Zend Application With a Database Handler)
    问题 假设您密切关注 ZendApplication 的约定,您应该在哪里设置数据库处理程序以供应用程序开发人员访问? 我知道如何设置 ZendDb 适配器。 我想知道的是,在 Zend 框架的上下文中,开发人员应该如何实例化他们的数据库处理程序,以便他们不必担心跨一个请求的多个实例化,每次都提供凭据等。 例如,当开发人员使用 Code Igniter 并需要运行任意查询时,控制器上有一个数据库处理程序。 $this->db->query(.... 这个约定的 Zend 等价物是什么? 明确地说,我可以想到使用 Zend Framework 提供的工具来完成此任务的六种方法。 我正在寻找的是 Zend Framework 在一般情况下如何希望您这样做。 回答1 这个想法是你的 Bootstrap 读取一个配置文件,然后你声明配置条目来描述你想要创建的数据库适配器: [bootstrap] resources.db.adapter = Pdo_Mysql resources.db.params.dbname = "mydatabase" resources.db.params.username = "webuser" resources.db.params.password = "XXXX" resources.db.isDefaultTableAdapter = true
  • 如何自动加载 Zend Framework 模块模型?(How to autoload Zend Framework module models?)
    问题 我正在 Zend Framework 中构建一个新的 CMS,我对 ZF 的接触不多。 客户端需要名为 Admin 和 FE 的两个部分。 因此,我将我的应用程序结构构建如下。 - SITE -- application ---- configs ---- layouts ---- modules -------- default ------------ controllers ------------ forms ------------ models ------------ views ------------ Bootstrap.php -------- admin ------------ controllers ------------ forms ------------ models ------------ views ------------ Bootstrap.php ---- Bootstrap.php -- public -- library -- index.php 当我访问像 http://site 或 http://site/admin 这样的站点时,我的结构工作正常,并且布局和控制器正在加载。 我的问题是 1.) 我将如何在模块中自动加载我的模型。 在特定于模型的引导程序文件中,我添加了以下代码。 但它不起作用。 class Admin
  • 使用Zend Framework连接到两个不同的数据库(connecting to two different databases with Zend Framework)
    问题 我这里有一个中等大小的Intranet网站,完全用Zend FW编写。 Intranet的数据库位于另一台服务器上。 现在,我需要使用一些新功能来扩展Intranet。 为此,我需要连接到同一服务器(和同一DBMS)上的另一个数据库。 现在的问题是:执行此操作的最佳方法是什么? 我应该创建一个新的Zend_Config对象和一个新的Zend_Db_Adapter吗? 还是应该使用现有的,然后尝试使用“ use otherdbname;”? 在同一会话内连接到新数据库的语句? 还是有更好的方法呢? 回答1 一种选择是从bootstrap.php注册2个数据库句柄,每个连接一个。 例如: $parameters = array( 'host' => 'xx.xxx.xxx.xxx', 'username' => 'test', 'password' => 'test', 'dbname' => 'test' ); try { $db = Zend_Db::factory('Pdo_Mysql', $parameters); $db->getConnection(); } catch (Zend_Db_Adapter_Exception $e) { echo $e->getMessage(); die('Could not connect to database.'); }
  • 如何使用 Zend Framework 中的守护程序访问我的模型(How do I Access my Models using a Daemon in Zend Framework)
    问题 我正在开发一个使用 Phirehose 收集和使用 Twitter Streaming API 的项目。 Phirehose 库旨在从命令行运行,最好作为守护程序或 cron 作业运行。 我创建了一个守护进程并将其放在库文件夹中。 Bootstrap.php 已更新为自动加载自定义库。 因此,应用程序本身在查看我的守护程序时没有问题。 我的问题是如何将它与 Zend Framework 正确集成。 我需要能够直接调用守护程序文件以从命令行或使用 Upstart 等工具启动它,但这样做时 Zend 应用程序不会加载,这意味着我无法访问我的模型。 我可以创建一个控制器来启动它,但我不想添加某人能够从 Web 界面控制守护程序的安全问题。 我也可以编写 PDO 来手动连接到数据库,但出于扩展的原因我试图避免它。 我希望所有数据库连接数据都驻留在 application.ini 中。 有没有办法在我的守护程序类中初始化我的 Zend Framework 应用程序,以便我可以使用这些模型? 回答1 这个例子演示了我如何使用 Zend_Queue 执行后台任务。 在这个特定的例子中,我使用 Zend_Queue 和 cronjob 在后台生成发票,我的 Zend_Queue 被初始化并在引导程序中注册。 创建作业,My_Job 源在此处: class My_Job_SendInvoice
  • 不使用 Zend_Application 的 Zend Framework 项目(Zend Framework project without using Zend_Application)
    问题 我一直在许多站点上阅读,甚至在这里,为了提高 Zend Framework 应用程序的性能,不要在引导程序中使用 Zend_Application,但一直无法找到一个站点来证明这一点。 你们知道有没有描述过这种方法的地方,并可能为我提供一些代码示例? 谢谢 回答1 我只是把这个放在一起: https://gist.github.com/2822456 转载如下以供完成。 未经测试,只是一些关于我认为它通常(!)可能如何工作的想法。 现在我已经了解了它,我对 Zend_Application、它的引导程序类和它的可配置/可重用应用程序资源有了更大的了解。 ;-) // Do your PHP settings like timezone, error reporting // .. // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/_zf/application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv(
  • Web 应用程序:框架或不框架?(Web-apps : to framework or not to framework?)
    问题 我了解 PHP 并且刚开始使用 MySql(但计划使用 ODBC)。 我不需要任何书来解释这一点。 我可能有资格开发一个简单的网站,但目标是开发相当雄心勃勃的应用程序。 我想几乎所有的 Web 应用程序都有一些共性,例如安全性、可扩展性等(例如,我完全不知道如何在服务器服务器上分发数据库或应用程序)。 由于我无法预见我可能开发的应用程序的确切性质(除了将涉及 PHP 和 ODBC),与框架结合是否有任何意义,或者我应该重新发明轮子并将其个性化让它成为我自己的框架。 如果是现有框架,那么是哪一个? 我能提供的唯一帮助是我不太可能做网站、门户网站、购物网站等,可能更倾向于资产跟踪和数据挖掘。 回答1 使用框架可以为您节省大量时间,并帮助您逻辑地组织您的应用程序。 如果应用程序很小,那么像 CodeIgniter 或 Kohana 这样的框架是理想的选择。 如果你正在构建一个需要扩展的更大的应用程序,那么 Symfony 或 Zend 是值得关注的。 如果您要在 Symfony 中启动您的应用程序,您将立即获得: 使用路由重写url 用于处理与 Web 表单有关的所有内容的表单框架国际化和本地化发电子邮件缓存管理区域生成器,帮助您快速添加数据单元测试框架 此外,整个框架是可扩展和可定制的,以满足您的需求。 如果没有框架,您必须自己编写所有这些。 或者集成几个不同的开源模块。