我正在使用afterFind函数来修改find函数中的数据.它工作正常.如果我将afterFind函数移动到一个行为(在插件中)它仍然有效,但仅当感兴趣的模型是主要模型时,即当模型属于另一个模型时不调用它.这有什么办法吗?我正在使用蛋糕1.3.4.这是行为的简化版本:
class ChemicalStructureBehavior extends ModelBehavior {
function afterFind(&$model, $results, $primary) {
foreach ($results as &$unit) {
// format chemical formula (with subscripts)
$unit[$model->alias]['chemical_formula_formatted'] = preg_replace('/([0-9]+)/i', '<sub>$1</sub>', $unit[$model->alias]['chemical_formula']);
}
return $results;
}
}
Run Code Online (Sandbox Code Playgroud) 您知道当您将鼠标悬停在链接上时,在大多数浏览器中,它会显示左下角(也称为chrome)或状态栏中的链接?我怎么能禁用它?
我已经花了一些时间尝试在CakePHP中使用Containable Behavior,但我无法让它像我预期的那样工作.
我的应用程序是不同的,但为了简化,我将把这个例子.假设我有一个包含线程和活动的论坛,可以对活动进行评级.一般关系是:
论坛:hasMany [Thread]
主题:belongsTo [论坛],hasMany [活动]
活动:belongsTo [主题],hasMany [评分]
评分:belongsTo [活动]
我想要实现的是,使用find方法,获得在某个论坛上执行的所有评级.我认为应该做的是以下内容:
$this->Rating->find('count', array(
'contain' => array(
'Activity' => array(
'Thread'
)
),
'conditions' => array(
'Thread.forum_id' => 1
)
));
Run Code Online (Sandbox Code Playgroud)
但结果查询是:
SELECT COUNT(*) AS `count` FROM `ratings` AS `Rating` LEFT JOIN `activities` AS `Activity` ON (`Rating`.`activity_id` = `Activity`.`id`) WHERE `Thread`.`forum_id` = 1;
Run Code Online (Sandbox Code Playgroud)
我使用'join'选项完成了这个,但它更复杂,我必须在很多情况下使用这种动作.
所有用例相关的文件可以在这里找到:http://dl.dropbox.com/u/3285746/StackOverflow-ContainableBehavior.rar
谢谢
更新23/11/2011
在调查框架后,感谢Moz Morris和api55的答案,我找到了问题的根源.
基本的问题是,正如我所理解的CakePHP,我以为它每次都在使用连接进行查询.它不会这样做的事情,它将获得我正在寻找的结果的实际操作将是这样的:
SELECT * FROM Rating JOIN Activity...
SELECT * FROM Activity JOIN Thread...
SELECT * FROM Activity JOIN …Run Code Online (Sandbox Code Playgroud) 我想在我的程序中使用behave lib.我在行为教程中编写代码.但是,当我"运行"我的教程项目时,我在PyCharm-console中看到:
C:\Python27\virtualenv\Scripts\python.exe "C:/Program Files (x86)/JetBrains/PyCharmProjects/tutorial/steps/tutorial.py"
Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)
我想我必须使用behave.exe来运行我的项目:
C:\Python27\virtualenv\Scripts\behave.exe
Run Code Online (Sandbox Code Playgroud)
怎么弄?
我花了很多时间尝试jquery/javscript"修复"来实现这一点.自上次更新Chrome Mobile for IOS以来,浏览器的地址栏表现不同.我相信你们都知道我在说什么:你向下滚动你的页面,栏子隐藏起来,但是一旦你向上滚动,就会出现.是的,这是一个很好的用户体验,我可以说.
问题是我的网络应用程序(标题)上面有固定元素,每次向上滚动时,地址栏都会覆盖我的固定元素.
我查找了其他网络应用程序(twitter,gmail),他们似乎找到了避免这种情况的方法.我想读一下你如何实现它的想法.没有必要告诉我不要使用固定元素.
所以我的问题是:有没有办法避免这种情况?你对这种情况有什么看法?
例如:https://mobile.twitter.com/EmWatson(最好在iphone上看到)
仅供参考:我使用Jquery移动框架作为我的网络应用程序.
谢谢.
我刚开始在CakePHP进行单元测试(耶!)并遇到了以下挑战.希望有人可以帮助我:-)
我的模型使用行为在本地保存后将更改发送到API.我想假装在测试期间对API进行的所有调用(这些将单独测试)以节省API服务器的负载,更重要的是,实际上不保存更改:-)
我正在使用CakePHP 2.4.1.
该文章的代码如下:
$provider = $this->getMock('OurProvider', array('getInfo'));
$provider->expects($this->any())
->method('getInfo')
->will($this->returnValue('200'));
Run Code Online (Sandbox Code Playgroud)
这可能是错误的方向,但我认为这可能是一个良好的开端.
有效地:一段代码,用于演示如何在CakePHP模型中模拟行为以进行单元测试.
也许这个问题会导致添加CakePHP手册作为额外的奖励,因为我觉得它在那里缺失.
在此先感谢您的努力!
我发现了这个相关的问题,应该回答这个问题(部分).无需模拟API,而是可以创建模型将使用的行为测试.
我想弄清楚BehaviorTest应该是什么样子.
我想修改它的点击行为TreeTableView,但老实说,我不确定这样做的预期方式是什么样的,或者它是否可以以任何方式改变.
大多数用户抱怨目前的行为不一致.有时单击一个单元格已经折叠/展开了treeitem,有时需要双击.这与编辑模式的初始化一起可能是一种痛苦.所以我很乐意自己处理点击行为.
我能够将行为缩小到TreeTableCellBehavior类:
@Override
protected void handleClicks(MouseButton button, int clickCount, boolean isAlreadySelected) {
// handle editing, which only occurs with the primary mouse button
TreeItem<S> treeItem = getControl().getTreeTableRow().getTreeItem();
if (button == MouseButton.PRIMARY) {
if (clickCount == 1 && isAlreadySelected) {
edit(getControl());
} else if (clickCount == 1) {
// cancel editing
edit(null);
} else if (clickCount == 2 && treeItem.isLeaf()) {
// attempt to edit
edit(getControl());
} else if (clickCount % 2 == 0) {
// …Run Code Online (Sandbox Code Playgroud) 我正在使用Symfony2/Doctrine创建项目并尝试实现特征.到目前为止,小试用没有问题,但我通常在复杂项目之前进行UML类和序列图.
什么是用于符号化PHP特征的UML设计对象,就我所知的行为而言可以看作是什么?有没有干净的方法呢?
非常感谢你的回答 !
萨科
这是我尝试在snackbar可见时向上推"NEXT"按钮:

如您所见,它无法按计划运行.看起来似乎textview被推到了后面RelativeLayout然后在snackbar消失时重新出现.相反,我想要的是textview出现向上推(因此它在上方snackbar),然后在snackbar消失时再回来.我还创建了一个小的github repo来证明这一点:
https://github.com/Winghin2517/TestFabMotion
这是CoordinatorLayout.Behavior我用于"NEXT"隐藏自己.当snackbar出现时,当它被推高时,行为取自FAB行为:
public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<TextView> {
public FloatingActionButtonBehavior(Context context, AttributeSet attrs) {
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, TextView child, View dependency) {
return dependency instanceof Snackbar.SnackbarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, TextView child, View dependency) {
float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
child.setTranslationY(translationY);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我用这个xml试过这个:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent" …Run Code Online (Sandbox Code Playgroud) 网站上修改后的滚动行为是如何制作的?我想完成加速滚动行为,如您在示例中所见。所以你以一定的速度滚动,当你放手后,页面会自动滚动一点,减慢并停止。
不幸的是,我绝对没有为您提供代码的基础,我希望您仍然可以帮助我。也许你可以推荐我一些js插件?