我想在php webproject中使用Birt Reports.因此,我通过将JavaBridgeTemplate621.war和birt.war移动到我的Tomcat来安装推荐的Java Bridge和BIRT Runtime.
之后我写了一个叫BirtEngine的短课:
try {
$ctx = java_context()->getServletContext();
$this->birdEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx);
java_context()->onShutdown(
java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook()
);
} catch (java_InternalException $e) {
die($e->getMessage());
}
Run Code Online (Sandbox Code Playgroud)
当我认识到$e->getMessage()返回时""我会看一下catalina.out并且在那里我发现了这个异常:
23.03.2011 15:02:43 org.apache.cxf.interceptor.AttachmentInInterceptor handleMessage
INFO: AttachmentInInterceptor skipped in HTTP GET method
23.03.2011 15:02:43 org.apache.cxf.interceptor.StaxInInterceptor handleMessage
INFO: StaxInInterceptor skipped.
23.03.2011 15:02:43 org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor handleMessage
INFO: ReadHeadersInterceptor skipped in HTTP GET method
23.03.2011 15:02:43 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: No such operation:
at org.apache.cxf.interceptor.URIMappingInterceptor.handleMessage(URIMappingInterceptor.java:77)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)
at …Run Code Online (Sandbox Code Playgroud) 我有一堆功能,我想进入一个类.它们目前被分成几个相当长的文件.我不想有一个2500行文件,但据我所知,你不能使用include将一个类分成多个文件.从理论上讲,我可以将函数分组到不同的类中,但它们之间的关系非常紧密,我觉得它们属于一体,并且将它们分开会减少我希望从程序方法中脱离出来的一些实用工具. (使用共享属性,而不是几乎每个函数中的一堆参数).
我知道这有点模糊,但任何建议/指针?如果重要,那就是原型,因此代码管理的简易性优先于安全性和性能.
更新:让我看看我是否可以删除一些模糊性:
此类/函数集输出复杂形式的html.每个部分中有许多不同的部分和变体,具体取决于当前传递给函数的约5或6个参数.我希望将参数一次定义为类的属性,然后从所有节创建方法中访问它们.如果我使用子类,那些属性的值将不会被正确初始化,因此需要一个类.(嗯......除非我把它们定义为静态.我可能刚刚回答了我自己的问题.我将不得不看看是否有任何理由不起作用.)
我目前有很多功能,如:
get_section_A ($type='foo', $mode='bar', $read_only=false, $values_array=array()) {
if ($this->type == 'foo') { }
else ($this->type == 'foo') { }
}
Run Code Online (Sandbox Code Playgroud)
所以我最初想象的是:
class MyForm {
public $type; // or maybe they'd be private or
public $mode; // I'd use getters and setters
public $read_only; // let's not get distracted by that :)
public $values_array;
// etc.
function __constructor ($type='foo', $mode='bar', $read_only=false, $values_array=array()) {
$this->type = $type;
// etc.
}
function get_sections () {
$result = …Run Code Online (Sandbox Code Playgroud) 我试图在字符串过滤器中使用此方法:
public function truncate($string, $chars = 50, $terminator = ' …');
Run Code Online (Sandbox Code Playgroud)
我期待这个
$in = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";
Run Code Online (Sandbox Code Playgroud)
还有这个
$in = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ??????????????????????????????";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ?????????????????? …";
Run Code Online (Sandbox Code Playgroud)
这是$chars减去$terminator字符串的字符.
此外,滤波器应该在$chars极限以下的第一个字边界切割,例如
$in = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";
Run Code Online (Sandbox Code Playgroud)
我很确定这应该适用于这些步骤
但是,我现在尝试了各种组合str*和mb_*功能,但都产生了错误的结果.这不是那么困难,所以我显然缺少一些东西.有人会为此分享一个有效的实现,或者指向一个资源,我终于可以理解如何做到这一点.
谢谢
PS是的,我之前已经检查过https://stackoverflow.com/search?q=truncate+string+php :)
您是否曾使用单独的表来"生成"DB的人工主键(以及为什么)?我的意思是拥有一个包含两列,表名和当前ID的表 - 通过简单地用该表名锁定行,获取键的当前值,增加它,您可以使用该表为某些表获取新的"ID"一个,解锁行.为什么您更喜欢这个超过标准整数标识列?
PS"想法"来自Fowlers模式的企业应用程序架构,顺便说一下......
我是Zend Framework的新手,我想知道如何在我的控制器中获取应用程序环境.
我在一个论坛中阅读使用:echo getenv('APPLICATION_ENV'); 但它不起作用.
我最近一直在阅读,TableData Gateway和RowData Gateway.根据"企业应用程序架构的模式",RDG一次处理一条记录,TDG处理整个表.但这两种模式看起来非常相似,它们封装了SQL查询并根据我们的查询返回单个记录或记录集中的许多记录.我无法确定何时更喜欢TDG用于RDG.用一些解释澄清差异将非常有帮助.根据Martin Fowler TDG是当RDG返回一条记录时,它与RDG相同.但我们也可以将RDG用于多个记录!那么为什么要使用TDG.任何帮助将不胜感激.谢谢.
我不打算问什么是最好的方式...?因为他们可能有几种方法可以做到这一点,我只想从您的经验中了解如何在开始构建网站时管理文件夹和文件?(注意:我不是英国本土人,这就是我在这里要求的原因,我找不到合适的地方来回答).
我已经编写了多年,但总是独立编写,我从不分享人们如何构建他们的网站.
作为一个信息,我在我的网站的根目录下创建了一个结构文件struct.php,其中包含我网站中许多页面共享的公共布局.
如果用户键入http://mywebsite.com/folder/它会请求包含'struct'文件导入的请求文件夹的索引文件,对于其他可变部分,如webpages的元数据,我正在创建一个文件夹命名元,包含任何类型数据的文件(.title,.description,.keywords),当然struct文件正在获取这些信息文件的内容,并将它们显示在文档中的适当位置.
我对这种结构感到满意,因为它已经使用了很长时间.但如果您提供一些建议或一些有用的链接和/或告诉我您如何管理自己的网站,我真的很感激.
我正在研究zend项目,我指的是其他zend项目来创建新的Zend Project.But我不喜欢盲目地遵循该项目而不理解.在Zend Directory结构中,在Model类中,我看到的类主要有两种类型,如in
- models
- DbTables
- Blog.php //Extends Zend_Db_Table_Abstract
- Blog.php // Contains methods like validate() and save()
- BlogMapper.php // Also Contains methods like validate(Blog b) & save(Blog b)
Run Code Online (Sandbox Code Playgroud)
为什么遵循这种特定的结构?这是分开Object类和Database模型类吗?
请解释.
维基百科引用的DI的定义指出:
A.高级模块不应该依赖于低级模块.两者都应该取决于抽象.B.抽象不应该依赖于细节.细节应取决于抽象.
我正在尝试将该原则应用于我的代码:
class Printer{
private $logger;
function __construct(Zend_Log $logger){
$this->logger=$logger;
}
function print(){
//Some code
$this->logger->log('Logger in action ;)');
}
}
Run Code Online (Sandbox Code Playgroud)
既然为什么Printer类依赖于Zend_Log哪个既不是抽象类也不是接口,那么我就违反了依赖性倒置原则.
如何知道Zend_Log不扩展抽象类也不实现接口?
基本上我使用Code Igniter,而Code Igniter基类是巨大的,当我print_r我的一些对象时,他们有嵌入其中的基类.这使得获取我实际想要的信息(其余属性)变得很痛苦.
所以,我想知道是否有一种方法可以隐藏,或者删除基类对象?
我试过了
clone $object;
unset($object->ci);
print_r($object);
Run Code Online (Sandbox Code Playgroud)
但当然ci属性是私有的.
我用于转储的实际功能是:
/**
* Outputs the given variables with formatting and location. Huge props
* out to Phil Sturgeon for this one (http://philsturgeon.co.uk/blog/2010/09/power-dump-php-applications).
* To use, pass in any number of variables as arguments.
* Optional pass in "true" as final argument to kill script after dump
*
* @return void
*/
function dump() {
list($callee) = debug_backtrace();
$arguments = func_get_args();
$total_arguments = count($arguments);
if (end($arguments) === true)
$total_arguments--;
echo '<fieldset …Run Code Online (Sandbox Code Playgroud) php ×8
oop ×3
poeaa ×3
birt ×1
database ×1
debugging ×1
multibyte ×1
properties ×1
refactoring ×1
sql-server ×1
string ×1
truncate ×1