我有一个调用的控制器DesignersController,该index方法列出它们,并且该view方法接受设计器名称作为参数并按名称检索它.
所以/designers将列出所有设计师,/designers/view/designer-name并将展示该设计师.
现在,如果设计器名称有空格,则需要在URL中进行转义.我有逃脱空间和取消空间的逻辑:
private $space_escape_char = '-';
function escapeSpaces($str)
{
return str_replace(" ",$this->space_escape_char,$str);
}
function unescapeSpaces($str)
{
return str_replace($this->space_escape_char," ",$str);
}
Run Code Online (Sandbox Code Playgroud)
现在这个view方法Controller需要访问它,所以当它传递像"Foo-Bar"这样的名字时,它可以将其转换为"Foo Bar".
index.ctp视图文件也需要访问它,因此当它列出所有设计器时,它可以提供每个设计器的链接,并且能够转义每个名称:
<?php foreach ($designers as $designer): ?>
<div>
<?php
echo $this->Html->link(
$designer['Designer']['name'],
array(
'controller' => 'designers',
'action' => 'view',
escapeSpaces($designer['Designer']['name'])
)
);
?>
</div>
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)
在没有代码重复的情况下处理此问题的最佳方法是什么?
我有这个模型app/models/product.php:
class Product extends AppModel
{
var $hasAndBelongsToMany = 'WishList';
var $actAs = array('Domainable');
function beforeFind($query)
{
echo "A";
}
}
Run Code Online (Sandbox Code Playgroud)
哪个使用此行为app/models/behaviors/Domainable.php:
class DomainableBehavior extends ModelBehavior
{
function beforeFind(&$model, $query)
{
echo "B";
}
}
Run Code Online (Sandbox Code Playgroud)
当我查看产品页面时,A回显但B不回显.我没有错.
我甚至认为行为根本没有加载.
我将文件权限设置Domainable.php为0777- 仍然不起作用,因此不是权限问题.
我换了一行:
var $actAs = array('Domainable');
Run Code Online (Sandbox Code Playgroud)
至:
var $actAs = array('does-not-exist');
Run Code Online (Sandbox Code Playgroud)
我没有区别.没错.
首先,我不明白为什么:如果没有加载Behavior,它就不会给我一些错误信息,原因如:"not found"或"access denied".这会产生错误吗?
我有一个类方法内的函数.
在方法中我可以参考,$this但我不能在函数中.它将返回此错误:
致命错误:在第78行的/var/www/john/app/views/users/view.ctp中不在对象上下文中时使用$ this
这是我的意思的一个例子:
class View
{
var $property = 5;
function container()
{
echo $this->property;
function inner()
{
echo "<br/>Hello<br/>";
echo $this->property;
}
inner();
}
}
$v = new View();
$v->container();
Run Code Online (Sandbox Code Playgroud)
你可以在这里进行测试pastie
是否有工作要做到这一点?
我知道我可以将$ this作为参数传递给你,但还有其他方法吗?使用global $this也会出错.
如果你好奇我为什么需要这个,那因为我的方法是MVC模型中的一个视图(或者似乎 - 我正在使用Cake),并且在视图中我需要使用一个函数,并且在函数中我需要引用到$this.
我有一张叫做custom_carts桌子的桌子custom_cart_items.
custom_cart_items有一个custom_cart_id被设置为的外键custom_cart.id
根据Cake Manual,当你调用Model-> delete()时,第一个参数是你要删除的条目的id,第二个参数是否是级联删除依赖条目.
所以当我打电话时,$this->CustomCart->delete(7,true)我得到这个错误:
SQL错误:1451:无法删除或更新父行:外键约束失败(
custom_carts.custom_cart_items,CONSTRAINTcustom_cart_itemsFOREIGN KEY(custom_cart_id)REFERENCEScustom_cart.id($this->CustomCart->delete(7,true)))
这是查询:
DELETE `CustomCart`
FROM `custom_carts` AS `CustomCart`
LEFT JOIN `users` AS `User`
ON (`CustomCart`.`user_id` = `User`.`id`)
WHERE `CustomCart`.`id` = 25
Run Code Online (Sandbox Code Playgroud)
它不应该级联和dlete其他条目吗?
那我为什么会收到错误?
INSERT INTO
product_search_table (id, score)
VALUES (
SELECT product_id, 50 FROM cart_product WHERE product_id = 555
)
Run Code Online (Sandbox Code Playgroud)
给我一个错误.我究竟做错了什么?
555将被变量替换.
这是我最近第二次得到完全相同的错误.我认为它与我正在使用的已弃用方法的教程有关.
今天错误来自我的types_controller.php,第64行:
$types = $this->Type->findAll("status=1");
Run Code Online (Sandbox Code Playgroud)
给我错误:
警告(512):SQL错误:1064:您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"findAll"附近使用正确的语法
我记得昨天跟着一个教程,其中像$ this-> Model-> search(param)这样的行给了我错误:
SQL错误:1064:您的SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"搜索"附近使用正确的语法
不确定问题在这里.