小编aim*_*eld的帖子

从Zend Framework 1到2逐步迁移

我必须将应用程序从Zend Framework 1.12.0迁移到版本2.似乎还没有迁移指南.我已经研究过ZF2编码约定,并且我采用了依赖注入(Zend\Di)和PHP 5.3命名空间.我的目标是将我的ZF1应用程序重构为ZF2模块.

问题:是否可以在每个步骤之后逐步执行至少部分工作的应用程序避免大量重构步骤?如果是,步骤是什么?

这是我对这种逐步迁移的想法,但我不知道在每一步之后我是否最终得到了一个有效的应用程序:

  1. 首先设置ZF2 Skeleton Application
  2. 设置新模块(MyApp)并将我的ZF1应用程序的内容重新组织到MyApp模块文件夹结构中.然后设置非常基本的配置和引导,并通过从ZF2 AbstractActionController扩展它来迁移IndexController.稍后将迁移模型(Zend_Db)和视图(Zend_View).这里的目标是有一个工作的IndexController :: indexAction,它没有很多依赖项.
  3. 设置更多配置和引导(Routing,Translate,Locale,Cache,Db,Acl,ViewHelpers,...).我想首先设置这些组件的ZF1版本,然后逐个迁移它们.
  4. 迁移其他控制器并使用Zend\Di或使用ServiceManager将依赖注入设置到控制器中.
  5. 通过使旧的phing脚本使用新的目录结构来设置自动部署.
  6. 将视图(包括帮助程序)和表单迁移到ZF2.
  7. 迁移模型(从Zend_Db到ZF2 Zend\Db或Doctrine).
  8. 逐个迁移其他ZF1组件(Translate,Locale,Cache,Acl,...).
  9. 重构康复和长假.

但是,只有当某些ZF2组件与ZF1组件一起工作时,我才会在每个步骤后都有一个workin应用程序.我不知道是否可以使用ZF1控制器来使用ZF1视图(和查看助手).

php migration zend-framework zend-framework2

26
推荐指数
2
解决办法
2万
查看次数

在zend框架中导出csv

我正在尝试将数据库表导出为可从浏览器下载的.csv.我的代码是基于zend框架的,我几乎有以下操作:

public function exportTableAction()
{
    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender();

    $fileName = $this->_getParam('fileName');
    $tableName = $this->_getParam('tableName');       

    header('Content-type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.$fileName.'"');

    echo $this->getCsv($tableName, $fileName);
}
Run Code Online (Sandbox Code Playgroud)

我可以下载包含有效数据的.csv文件.但是,即使我禁用了布局和渲染器,我仍然可以在我的.csv文件末尾获得页面,侧边栏和页脚的输出.有没有办法禁用除exportTableAction中生成的html输出之外的任何html输出?或者我可以以不同的方式将标头信息和csv字符串发送到浏览器吗?

顺便说一句:我正在使用动作堆栈插件来帮助我呈现标题和侧边栏,如下所示:

...
$actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
$actionStack->pushStack($userlogAction);
$actionStack->pushStack($rightcolAction);
Run Code Online (Sandbox Code Playgroud)

干杯,阿德里安

php csv zend-framework

15
推荐指数
2
解决办法
2万
查看次数

依赖注入:我应该为一些对象注入所有内容还是使用服务定位器?

我目前正在使用服务定位器重构基于Zend Framework的PHP库(构造函数)依赖注入(DI).我觉得它改进了我的代码很多,但我不确定是否应该注入所有依赖项.对于使用很多且非特定的依赖项,服务定位器似乎更容易.我有以下依赖项,我仍然使用服务定位器访问:

  1. Zend_Translate对象(我需要在任何地方翻译消息).
  2. Zend_Locale对象(存储当前语言)
  3. 一个Zend_Config对象(很多东西都可以通过ini-file配置)
  4. 实用程序类的实例(用于数组和字符串操作)

如果我注入了这些依赖项,它们会使我的构造函数混乱并分散特定的依赖关系.为了测试,我可以在运行测试之前在我的服务定位器中设置这些依赖项.我的实用主义者说我做得很好,但纯粹主义者说我应该一直用DI.

你会推荐DI用于这些类型的物体吗?

php dependency-injection zend-framework

9
推荐指数
1
解决办法
1299
查看次数

在PhpStorm项目工具窗口中显示.idea文件夹

默认情况下,PhpStorm隐藏项目工具窗口中的.idea文件夹.但是,我想显示它以检查文件并添加/编辑.idea/.gitignore文件以包含和排除版本控制中的特定文件.我搜索了项目配置选项,以取消隐藏.idea文件夹,但还没找到方法.

我可以使用另一个编辑器来管理.idea文件夹中的文件,但我想使用PhpStorm的git-integration来管理这些文件.

jetbrains-ide intellij-idea phpstorm

9
推荐指数
1
解决办法
3388
查看次数

使用doctrine 2 DBAL加入子查询

我正在重构Zend Framework 2应用程序以使用doctrine 2.5 DBAL而不是Zend_DB(ZF1).我有以下Zend_Db查询:

$subSelect = $db->select()
    ->from('user_survey_status_entries', array('userSurveyID', 'timestamp' => 'MIN(timestamp)'))
    ->where('status = ?', UserSurveyStatus::ACCESSED)
    ->group('userSurveyID');


$select = $db->select()
    // $selectColNames contains columns both from the main query and 
    // the subquery (e.g. firstAccess.timestamp AS dateFirstAccess).
    ->from(array('us' => 'user_surveys'), $selectColNames)
    ->joinLeft(array('firstAccess' => $subSelect), 'us.userSurveyID = firstAccess.userSurveyID', array())
    ->where('us.surveyID = ?', $surveyID);
Run Code Online (Sandbox Code Playgroud)

这导致以下MySQL查询:

SELECT `us`.`userSurveyID`, 
    // More columns from main query `us`
    `firstAccess`.`timestamp` AS `dateFirstAccess`
FROM `user_surveys` AS `us`
LEFT JOIN (
    SELECT `user_survey_status_entries`.`userSurveyID`, 
            MIN(timestamp) AS `timestamp` 
    FROM …
Run Code Online (Sandbox Code Playgroud)

php mysql query-builder doctrine-orm zend-framework2

8
推荐指数
2
解决办法
2万
查看次数

Webpack:避免多个 jquery 实例

我们目前正在重构我们的代码库以使用 webpack,但是我们遇到了 jQuery 的问题。例如,在一个 js 文件中触发的更改事件不会再在其他 js 文件中监听。

看起来 jQuery 被实例化了多次。当我$.expando在 js 文件中查看触发更改事件时,它与$.expando附加事件侦听器的 js 文件中不同。这两个js文件属于不同的webpack入口点,我怀疑jQuery是为每个入口点单独实例化的。

所以我想问题是我们如何在多个入口点之间共享单个 jQuery 实例?我怀疑使用单个 jQuery 实例可以解决事件侦听器问题。

此外,看起来整个 jQuery 代码在 webpack 生成的每个 js 文件中都是重复的。我们的 webpack 设置肯定有问题。另外,我不确定我们是否应该有这么多入口点。

这是我们的 webpack 配置:

const webpack = require('webpack');
const path = require('path');

const Dotenv = require('dotenv-webpack');
const ManifestPlugin = require('webpack-manifest-plugin');
const {
  CleanWebpackPlugin
} = require('clean-webpack-plugin');
const WebpackWatchedGlobEntries = require('webpack-watched-glob-entries-plugin');

const distPath = path.resolve(__dirname, 'public');
const globEntries = require('./entry-globs');

module.exports = {
  entry: WebpackWatchedGlobEntries.getEntries(
    globEntries.globs, {
      ignore: globEntries.ignore …
Run Code Online (Sandbox Code Playgroud)

javascript jquery webpack

7
推荐指数
0
解决办法
556
查看次数

PHP库内部或外部的文档根目录?

我正在编写一个基于zend框架的PHP库.我的几个Web项目使用了我的库.我不知道我应该把我的图书馆放在哪里.将它放在单个项目的文档根目录之外似乎是有意义的,因此我不必在每个单独的项目中维护库.我目前的设置如下:

/var/www/vhosts/project1/
/var/www/vhosts/project2/
/var/www/vhosts/libraries/zend-framework/zend-framework-1.11.0/...
/var/www/vhosts/libraries/my-lib/my-lib-1.0.0/...
Run Code Online (Sandbox Code Playgroud)

像这样,zend-framework和my-lib的特定版本都可以在我的项目中使用.

另一种设置如下所示:

/var/www/vhosts/project1/
/var/www/vhosts/project1/libraries/zend-framework/zend-framework-1.11.0/...
/var/www/vhosts/project1/libraries/my-lib/my-lib-1.0.0/...
/var/www/vhosts/project2/
/var/www/vhosts/project2/libraries/zend-framework/zend-framework-1.11.0/...
/var/www/vhosts/project2/libraries/my-lib/my-lib-1.0.0/...
Run Code Online (Sandbox Code Playgroud)

第一个版本对我来说更有意义,但如果我的项目依赖于文档根文件夹之外的文件,我不确定是否会遇到一些安全问题.此外,如果my-lib在项目文档根目录之外,当我尝试在my-lib中包含javascript文件时遇到问题.

这里有什么最佳实践,我应该在哪里放置我的库和zend框架?

php zend-framework

4
推荐指数
1
解决办法
852
查看次数

Zend Framework:如何在将最终视图输出发送到浏览器之前点击它?

我正在尝试在它作为字符串发送到浏览器之前访问最终的xhtml输出.操作和插件的postDispatch()方法似乎为时尚早.当我Zend_Controller_Front::dispatch()使用调试器逐步执行方法时,我可以$this->_response->sendResponse()通过添加监视表达式在最后调用之前作为字符串访问所需的输出$this->getResponse()->getBody().但是,似乎没有专门的钩子可以直接进入那里.我需要最终的响应体作为字符串,以便将其发送到Prince XML以生成pdf.有人知道这样做的优雅方式吗?

谢谢,阿德里安

php pdf rendering zend-framework

3
推荐指数
1
解决办法
720
查看次数

zend框架stringtrim过滤器无法正常工作

我遇到了zend framework的字符串修剪过滤器问题.我使用以下代码在Zend_Form中设置文本元素:

$voucherValidator = new Project_Validate_Voucher();        
$code = $this->addElement('text', 'code', array('label'=>'Gutscheincode'));
$code = $this->getElement('code')
    ->addFilter('StringTrim')
    ->addValidator($voucherValidator, true);
Run Code Online (Sandbox Code Playgroud)

当我输入一些前面有空格或制表符的文本时,验证器正确地处理StringTrim过滤的输入并接受输入.当我稍后在代码提交后检查$ _POST ['code']时,我得到了未经过滤的输入.如何让我的文本元素发布过滤后的值?

zend-framework filter

0
推荐指数
1
解决办法
4416
查看次数

在 ClickHouse 中连接大表:内存不足或速度慢

我有 3 个大表(>100 GB,每个表有数百万行):eventspage_viewssessions。这些表通过 1-n 关系连接,请参见下面的表设置。我正在尝试创建一个非规范化events_wide表,其中包含每个事件的一行,其中相应的page_viewssessions列被连接。这个想法是消除复杂分析查询所需的联接,因为这些联接速度很慢。

我创建了一个物化视图,它将和表events_mv连接到事件表。每当将新事件插入到 中时,物化视图应将一行插入到 中,自动连接 page_view 和会话。但是,当我插入一个新事件时,查询要么无法完成,要么因内存不足错误而终止。page_viewssessionseventsevents_wide

events即使从到运行这个简单的连接查询也会page_views导致内存不足错误:Memory limit (for user) exceeded: would use 99.21 GiB。我使用具有 24+ GB RAM 的 ClickHouse Cloud 生产实例:

SELECT
    -- Select columns from events and page_views
FROM events AS e
LEFT JOIN page_views AS p ON p.property_id = e.property_id AND p.id = e.page_view_id
LIMIT 3;
Run Code Online (Sandbox Code Playgroud)

我尝试了 3 个表的不同主键排序 …

join materialized-views clickhouse

0
推荐指数
1
解决办法
2762
查看次数