小编JD *_*cks的帖子

我知道视图和控制器不应该共享逻辑..但我怎么能这样做?

我有一个调用的控制器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)

在没有代码重复的情况下处理此问题的最佳方法是什么?

php model-view-controller cakephp

0
推荐指数
1
解决办法
92
查看次数

CakePHP:我如何解决我的行为问题?

我有这个模型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.php0777- 仍然不起作用,因此不是权限问题.

我换了一行:

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".这会产生错误吗?

cakephp behavior cakephp-1.3

0
推荐指数
1
解决办法
853
查看次数

如何在方法内部的函数中使用$ this?

我有一个类方法内的函数.

在方法中我可以参考,$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.

php oop cakephp

0
推荐指数
1
解决办法
495
查看次数

CakePHP删除不级联.导致外键错误

我有一张叫做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,CONSTRAINT custom_cart_items FOREIGN KEY(custom_cart_id)REFERENCES custom_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其他条目吗?

那我为什么会收到错误?

mysql cakephp foreign-keys

0
推荐指数
1
解决办法
3845
查看次数

这个查询有什么问题?

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将被变量替换.

mysql

-1
推荐指数
2
解决办法
116
查看次数

在CakePHP中获取SQL错误:1064

这是我最近第二次得到完全相同的错误.我认为它与我正在使用的已弃用方法的教程有关.

今天错误来自我的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行的"搜索"附近使用正确的语法

不确定问题在这里.

php cakephp cakephp-1.3

-1
推荐指数
1
解决办法
2088
查看次数