我正在对Action Helper的preDispatch方法进行ACL检查.当它失败时,我想调用动作控制器的_redirect方法,但是我很难做到这一点.
在这篇文章附带的评论中,zend-framework从另一个动作助手中调用动作助手,我看到两个解决方案.在第一个中,控制器从助手访问为$ this - > _ actionController.在第二个中,使用$ this-> getActionController()访问它.
我尝试了以下两种方法:
$this->_actionController->_redirect('/');
$this->getActionController()->_redirect('/');
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,我得到'方法'_redirect'不存在......'.是否可以限制从动作帮助程序访问哪些控制器方法?
当用户在没有正确的post参数的情况下访问/ user/validate时,我的Zend应用程序抛出了一个zend异常.(我得到标准的"发生错误"消息,在我的布局中框住).这是故意的.
我现在正试图用PHPUnit来测试这种行为.这是我的测试:
/**
* @expectedException Zend_Exception
*/
public function testEmptyUserValidationParametersCauseException() {
$this->dispatch('/user/validate');
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我收到一条消息,说它失败了,"预期异常Zend_Exception".有任何想法吗?
我在文件中有其他测试工作正常......
谢谢!
当使用其他框架或纯 PHP 时,我会保护我的模型属性。然后,我根据需要创建公共 getter 和 setter,并使用__get()和代理它们__set()。这有助于我晚上睡觉。
最近我开始使用 Laravel,我对 Eloquent 模型的“不受保护”程度感到惊讶。我知道我可以使用$guarded和$fillable属性来控制批量分配,但这仍然为意外访问留下了很大的空间。
例如,我的模型有一个status属性。它在模型创建时设置了默认值,并且仅应在调用$model->activate()或时进行修改。$model->deactivate()但默认情况下,Laravel 允许开发者直接修改它。据我所知,防止这种情况的唯一方法是创建一个 setter,并在调用它时抛出异常。
我错过了什么吗?也许我只是需要放松一下?构建默认安全的 Eloquent 模型的最佳方法是什么?
我在我的模型中使用了很多类常量。当我想在刀片中使用它们时,我首先在模板顶部导入它们。
例如:
@php
use App\Model\Core\User;
@endphp
Run Code Online (Sandbox Code Playgroud)
稍后在模板中我使用它们,如下例所示。
<option value="@php echo User::MY_CONSTANT @endphp">This is an option</option>
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方法来解决这个问题?将 a 直接导入namespace由模板引擎管理的变量范围似乎有点粗糙。我IDE (phpstorm)肯定不喜欢它。
在我的PHP脚本中,我运行一个更新语句,如下所示:
$this->_db->update('names', $data, $this->_db->quoteInto('id = ?', $obj->id));
Run Code Online (Sandbox Code Playgroud)
db句柄是Zend_Db_Adapter_Abstract实例(PDO MySql种类).
问题是更新失败,我似乎无法获得有关错误的更多信息.
该错误发生在try/catch块中.当我发现错误时,我运行:
$db->getProfiler()->getLastQueryProfile();
Run Code Online (Sandbox Code Playgroud)
输出是:
2012-11-14T22:20:02+11:00 INFO (6): Zend_Db_Profiler_Query Object
(
[_query:protected] => begin
[_queryType:protected] => 64
[_startedMicrotime:protected] => 1352892002.6064
[_endedMicrotime:protected] => 1352892002.6066
[_boundParams:protected] => Array
(
)
Run Code Online (Sandbox Code Playgroud)
我知道它说没有参数绑定,但我真的不认为是这种情况.我认为不知怎的'最后一次查询'不是我认为的那样.
其次,当我发现错误时,我也会运行:
$db->getConnection()->errorInfo();
Run Code Online (Sandbox Code Playgroud)
输出是:
2012-11-14T22:20:02+11:00 INFO (6): Array
(
[0] => 00000
[1] =>
[2] =>
)
Run Code Online (Sandbox Code Playgroud)
显然这不是很有帮助.
有任何想法吗?如何获得有关错误的更多信息?
谢谢!
升级到Apache 2.4后有没有人遇到404错误和phpmyadmin?
我的ubuntu机器几天前运行升级,因此我无法访问localhost/phpmyadmin.我刚收到404错误.
我知道2.4中有安全性更改,但我检查了apache加载的phpmyadmin.conf中的设置,我看不到任何会影响非管理员用户的内容.此外,我评论了旧的安全规则,并添加了新的规则,但仍然没有工作......
我刚开始使用ZF2,我真的非常喜欢它.
令我困惑的一件事是没有注册表组件.我意识到服务管理器在大多数情况下使注册表过时.我非常依赖它而且很棒.
但有时我发现自己需要访问"全局"对象,而我无法访问服务管理器.例如,在我的Domain\User对象中,我需要访问Zend\Log.
我不希望在我的Domain对象中提供Service Manager,因为它们非常漂亮和原始,并且没有因这些考虑因素而受到影响.我可以在需要时"新建"一个日志实例,但是我经常这么做,我宁愿预先配置一个实例.我可以把它包装成单身,但这似乎是一个倒退的步骤.我可以创建自己的迷你注册表,但如果这是一个好主意,我相信Zend家伙会留下这样的组件.
那么,还有哪些其他选择?
编辑:
那么,我可以使用Zend DI吗?我看到这个问题部分涵盖了它,使用Zend\Di\Di配置类别名
从 Vuex 检索数据时,在某些情况下,使用 getter 和直接访问状态之间的选择非常明确。例如:
count变量的值,那么直接访问状态似乎是有意义的但是对于其他只需要少量逻辑来检索值的情况呢?例如,如果foo我的商店的根目录中有一个对象,并且:
使用mapState函数可以满足这些需求中的任何一个,但我应该使用它mapGetter吗?有什么不同?
更新:
这是一个错误,我已将其作为问题在 github 上提出。老实说,该组件还没有真正准备好供主流使用。
vuejs-datepicker如果日期是 13 或更长,我将不接受 dd/mm/yy 格式。据推测,这是因为它将前两位数字解释为月份,因此拒绝任何大于 12 的数字。
日历弹出。您可以选择一个日期,它会显示在输入字段中。然而,一旦视野失去焦点,它就会被清除。
我尝试过使用静态字符串作为 的值format和函数。以下是功能版本。
HTML:
<div id="respond_by">
<date-picker name="respond_by"></date-picker>
</div>
Run Code Online (Sandbox Code Playgroud)
页面底部的脚本:
<script>
$(function () {
new Vue({ el: "#respond_by" });
});
</script>
Run Code Online (Sandbox Code Playgroud)
我的单个文件组件:
<template>
<vue-date-picker placeholder="dd/mm/yy"
input-class="form-control"
:name="name"
:format="customDateFormat"
monday-first
typeable></vue-date-picker>
</template>
<script>
import moment from 'moment';
import DatePicker from 'vuejs-datepicker';
export default {
props : [
'name'
],
components: {
'vue-date-picker' : DatePicker
},
methods: {
customDateFormat(date) {
return moment(date).format('DD/MM/YY');
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
全局注册组件:
import …Run Code Online (Sandbox Code Playgroud) 我正在使用 Laravel 5.6。该文档说我可以使用以下代码在用户浏览器中显示文件:
return response()->file($pathToFile);
Run Code Online (Sandbox Code Playgroud)
如何让它与非公开的 S3 文件一起使用?我已经尝试过以下方法:
return response()->file(Storage::disk('private')->path("my_directory/{$fileName}");
Run Code Online (Sandbox Code Playgroud)
但它会抛出“找不到文件”错误。
编辑:这是我的解决方法:
return response(Storage::disk('private')->get("my_directory/{$fileName}"), 200)
->header('Content-Type', 'application/pdf')
->header('Content-Disposition', 'inline');
Run Code Online (Sandbox Code Playgroud)