我有一个基于快速启动设置的Zend Framework应用程序.
我已经让演示工作了,现在我正在实例化一个新的模型类来做一些真正的工作.在我的控制器中,我想将配置参数(在application.ini中指定)传递给我的模型构造函数,如下所示:
class My_UserController extends Zend_Controller_Action
{
public function indexAction()
{
$options = $this->getFrontController()->getParam('bootstrap')->getApplication()->getOptions();
$manager = new My_Model_Manager($options['my']);
$this->view->items = $manager->getItems();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的例子允许访问选项,但似乎非常圆.有更好的方法来访问配置吗?
通常,这对我有用:
$db = Zend_Db_Table::getDefaultAdapter();
$where = $db->quoteInto('id = ?', $id);
$db->delete('tablename', $where);
Run Code Online (Sandbox Code Playgroud)
但我必须匹配两个ID.所以我真的不知道如何构建它.
WHERE first_id = 'id1' AND second_id = 'id2'
Run Code Online (Sandbox Code Playgroud)
那么我如何使用Zend Framework做到这一点?
使用Zend Framework 1.10和Doctrine 2(Beta1)启动项目.我在自己的库代码中使用命名空间.
生成代码覆盖率报告时,我收到有关重新声明类的致命错误.为了提供更多信息,我在我的phpunit可执行文件中注释掉了xdebug_disable()调用,这样你就可以看到函数trace(由于输出太多而禁用了局部变量输出).
这是我的终端输出:
$ phpunit
PHPUnit 3.4.12 by Sebastian Bergmann.
........
Time: 4 seconds, Memory: 16.50Mb
OK (8 tests, 14 assertions)
Generating code coverage report, this may take a moment.PHP Fatal error: Cannot redeclare class Cob\Application\Resource\HelperBroker in /Users/Cobby/Sites/project/trunk/code/library/Cob/Application/Resource/HelperBroker.php on line 93
PHP Stack trace:
PHP 1. {main}() /usr/local/zend/bin/phpunit:0
PHP 2. PHPUnit_TextUI_Command::main() /usr/local/zend/bin/phpunit:54
PHP 3. PHPUnit_TextUI_Command->run() /usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:146
PHP 4. PHPUnit_TextUI_TestRunner->doRun() /usr/local/zend/share/pear/PHPUnit/TextUI/Command.php:213
PHP 5. PHPUnit_Util_Report::render() /usr/local/zend/share/pear/PHPUnit/TextUI/TestRunner.php:478
PHP 6. PHPUnit_Framework_TestResult->getCodeCoverageInformation() /usr/local/zend/share/pear/PHPUnit/Util/Report.php:97
PHP 7. PHPUnit_Util_Filter::getFilteredCodeCoverage() /usr/local/zend/share/pear/PHPUnit/Framework/TestResult.php:623
Fatal error: … 我刚刚在Zend Framework的HTTP Auth库中遇到了这段代码.它似乎使用特殊的字符串比较功能,使其更安全.但是,我不太明白这些评论.有人可以解释为什么这个功能比做的更安全$a == $b吗?
/**
* Securely compare two strings for equality while avoided C level memcmp()
* optimisations capable of leaking timing information useful to an attacker
* attempting to iteratively guess the unknown string (e.g. password) being
* compared against.
*
* @param string $a
* @param string $b
* @return bool
*/
protected function _secureStringCompare($a, $b)
{
if (strlen($a) !== strlen($b)) {
return false;
}
$result = 0;
for ($i = 0; $i < …Run Code Online (Sandbox Code Playgroud) 我在zend代码上重新分解php,所有的代码都充满了$_GET["this"]和$_POST["that"].我一直使用的更phpish $this->_request->getPost('this')和$this->_request->getQuery('that')(这一个是没有这么多getGet的getquery insteado逻辑).
所以我想知道我的方法是否更安全/更好/更容易保持.我在Zend Framework文档中读到,您必须验证自己的输入,因为请求对象不会这样做.
这让我有两个问题:
谢谢!
我正在尝试使用Zend_Controller_Plugin_ErrorHandler来处理我的错误404个案例.根据文档,插件具有常量,可以用来匹配异常类型并相应地处理它们.例如
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
// 404 error -- controller or action not found
Run Code Online (Sandbox Code Playgroud)
有谁知道如何专门创建这些类型的例外?
我正在为我的项目使用Zend Framework 1.x. 我想创建一个Web服务只返回调用函数的JSON字符串.我尝试使用Zend_Controller_Action并应用这些方法:
1.
$this->getResponse()
->setHeader('Content-type', 'text/plain')
->setBody(json_encode($arrResult));
Run Code Online (Sandbox Code Playgroud)
2.
$this->_helper->getHelper('contextSwitch')
->addActionContext('nctpaymenthandler', 'json')
->initContext();
Run Code Online (Sandbox Code Playgroud)
3.
header('Content-type: application/json');
Run Code Online (Sandbox Code Playgroud)
4.
$this->_response->setHeader('Content-type', 'application/json');
Run Code Online (Sandbox Code Playgroud)
5.
echo Zend_Json::encode($arrResult);
exit;
Run Code Online (Sandbox Code Playgroud)
6.
return json_encode($arrResult);
Run Code Online (Sandbox Code Playgroud)
7.
$this->view->_response = $arrResult;
Run Code Online (Sandbox Code Playgroud)
但是当我使用cURL获取结果时,它返回了一些由一些HTML标记包围的JSON字符串.然后我尝试Zend_Rest_Controller使用上面的选项.它仍然没有成功.
PS:上面的大多数方法来自Stack Overflow上提出的问题.
我正在尝试编写一个cronjob控制器,所以我可以调用一个网站并执行所有模块cronjob.php.现在我的问题是我该怎么做?
卷曲是一种选择,所以我也可以计算错误和成功吗?
[更新]
我想我还没有解释得够.
我想要做的是有一个文件,我可以从http:// server/cronjob调用,然后让它执行每个/application/modules/*/controller/CronjobController.php或者有另一种方法这样做所有的cronjobs不在一个地方,而是在模块所在的同一个地方.这将为我提供优势,如果模块不存在,它不会尝试运行其cronjob.
现在我的问题是你将如何执行CronjobController的所有模块,或者你会以完全不同的方式执行它,因此它仍然保持模块化?
我希望能够分发出多少cronjobs成功运行,有多少没有
我有一个数组的信息看起来或多或少像这样:
$data[] = array('content'=>'asd');
$data[] = array('content'=>'asdf');
Run Code Online (Sandbox Code Playgroud)
我想将两个条目添加到数据库中.
$db->insert('table', $data);
Run Code Online (Sandbox Code Playgroud)
不添加两个条目.我究竟做错了什么?我必须使用Zend_ Db_Table吗?
$data = array('content'=>'asdf');
$db->insert('table', $data);
Run Code Online (Sandbox Code Playgroud)
当然是有效的
扩展问题:为什么我应该使用数据映射器/ Db_Table_Row,因为DbTable能够处理大多数数据操作的基本任务.
我目前正在学习ZF v1.11
对于数据库操作,我为每个表创建了DbTable.例如,"users"表由Application_Model_DbTable_Users表示,其中没有附加代码.
在操作数据时,我可以使用:
<?php
$uTable = new Application_Model_DbTable_Users();
$newUid = $uTable->insert(array('name'=>'Old Name', 'email'=>''));
$user = $uTable->find($newUid)->current();
// Then I can use $user which is instance of Table_Row
$user->name = "New Name";
$user->email = "email@addr.com";
$user->save();
Run Code Online (Sandbox Code Playgroud)
我的问题是,何时需要定义一个行类(假设在ZF-Tutorials中将Table_Row称为DataMapper)
// By, adding this to the DbTable class
protected $_rowClass = 'Application_Model_User';
Run Code Online (Sandbox Code Playgroud)
为每个实体设置Row类有什么好处?任何人都可以指出我的最佳做法.