标签: cakephp

CakePHP在SELECT输入中选择默认值

使用CakePHP:

我有多对一的关系,让我们假装它是很多叶子到树.当然,我烘焙了一个表单来向树中添加一个Leaf,你可以使用表单助手创建的下拉框(标记)指定它是哪个树.

唯一的一点是,SELECT框始终默认为Tree#1,但我希望它默认为它被添加到的树:

例如,调用example.com/leaf/add/5将调出接口以向树#5添加新的Leaf.Leaf.tree_id默认为"Tree 5" 的下拉框,而不是它当前默认为"Tree 1".

我需要在Leaf控制器和Leaf view/add.ctp中执行此操作吗?

php cakephp helpers relationships cakephp-2.x

16
推荐指数
4
解决办法
11万
查看次数

CakePHP应用程序部署

我有兴趣了解人们如何部署CakePHP应用程序.我最近接触过一些自由开发的CakePHP开发,这对我来说是一个很好的机会,可以在表示层获得一些经验(在我的FT工作中,我在业务和持久层中进行Java EE开发).

我的想法在这一点上有点混乱,但我正在考虑以下场景:

  • 在IDE中工作的开发人员修改文件,该文件自动(在后台)与本地运行的开发Web服务器同步.这种情况是我理想地喜欢进行开发的方式...进行更改并能够在没有任何额外步骤的情况下查看操作中的更改.

  • 在IDE中工作的开发人员修改一个文件,该文件通过FTP与远程运行的开发Web服务器自动(在后台)同步.当我使用我的上网本(它运行我的IDE足够慢,因为它没有混合中的Web服务器)时,这种情况会很有用.

  • 管理员将最新版本的CakePHP应用程序从源代码存储库部署到本地运行的Web服务器.
  • 管理员通过FTP将最新版本的CakePHP应用程序从源代码存储库部署到Web服务器.
  • 管理员将旧版本的CakePHP应用程序从源代码存储库部署到本地运行的Web服务器.
  • 管理员通过FTP将旧版本的CakePHP应用程序从源代码存储库部署到Web服务器.

我最熟悉的开发工具是Eclipse,Ant和Subversion.我的偏好是继续使用它们,但我会考虑切换,如果这样做可以很容易地实现这些场景.

问题:

  • 在这些合理的情况下,还是应该以不同的方式考虑开发和部署?
  • 有哪些工具可以帮助简化开发/部署?用Ant,脚本等滚动我自己的解决方案会更好吗?
  • 我们如何在部署期间处理数据库问题?如何为特定部署指定数据库连接属性?如果更新到CakePHP应用程序的较新版本(或恢复到旧版本)需要更改数据库架构和数据迁移,该怎么办?
  • 我们如何配置不同部署之间的属性?例如,考虑增加开发期间使用的调试和日志记录级别,防止在开发期间将付款发送到支付网关等.
  • 升级或还原部署如何影响客户?例如,如果他们处于交易中间(例如购买产品)?
  • 我们如何处理不同的CakePHP安装类型?根据安装类型,可能需要将文件安装在不同的位置.我们怎么知道应该在哪里安装文件?CakePHP书籍描述了开发,生产和高级安装.

对于一篇文章中的这么多问题感到抱歉,但我认为这些问题都是相关的,并认为将讨论集中在一个地方是有用的.

deployment cakephp

16
推荐指数
1
解决办法
5282
查看次数

Cakephp Auth具有多个"用户"表

我想知道如何只处理一个身份验证过程和多个表中的"用户".我有4个用户表:用户,管理员,艺术家,茶叶都有特定字段,但我希望所有这些用户只能通过主页上的一个表单连接,然后重定向到他们的特定仪表板.

我认为重定向不应该是一个问题,并且添加的一些路由应该可以工作,但我真的不知道在哪里可以看到/开始这么做.

干杯,
尼古拉斯.

编辑:这是最终解决方案(感谢deizel)

App::import('Component', 'Auth');
class SiteAuthComponent extends AuthComponent {

    function identify($user = null, $conditions = null) {
        $models = array('User', 'Admin', 'Artist');
        foreach ($models as $model) {
            $this->userModel = $model; // switch model
            $this->params["data"][$model] = $this->params["data"]["User"]; // switch model in params/data too
            $result = parent::identify($this->params["data"][$model], $conditions); // let cake do its thing
            if ($result) {
                return $result; // login success
            }
        }
        return null; // login failure
    }
}
Run Code Online (Sandbox Code Playgroud)

authentication cakephp multiple-tables cakephp-1.3

16
推荐指数
1
解决办法
1万
查看次数

没有PHP经验的人应该使用像CakePHP或Symfony这样的框架吗?

我有一个简单的开发网站,我想学习PHP.我希望该网站安全,可扩展且易于维护.我应该同时学习框架和PHP吗?如果我构建一个框架,将会有许多不熟悉的代码.你会说这增加了安全隐患吗?

php security symfony1 scalability cakephp

16
推荐指数
1
解决办法
1896
查看次数

如何从Cake Shell读取数据库配置设置?

我想编写一个蛋糕shell,使用mysqldump对我的数据库进行夜间备份.我可以将它作为一个shell脚本,但是如果我可以将它塞进一个CakePHP shell中,那么我将获得它在开发和实时服务器上工作的额外好处,如果我可以让它自动读取我的数据库配置设置.我会把蛋糕壳做成cron,并且知道我经常备份我的数据库时会有一些安心.

在我的shell中,我正在尝试构建一个以"mysqldump --user ="开头的字符串,我想从app/config/database.php获取用户名.我怎样才能获得database.php中的数据?

cakephp

16
推荐指数
3
解决办法
2万
查看次数

CakeEmail - 我如何使用它?

在我的控制器中,我正在使用具有以下代码的电子邮件功能:

public function email($mail = null){

    $email = new CakeEmail('default');
    $email->config('default');

    $email->from(array('test@test.com' => 'testing'));
    $email->to('$mail');
    $email->subject('Approved');
    $email->send('Approved');
Run Code Online (Sandbox Code Playgroud)

在顶部,我有

App::uses('AppController', 'Controller', 'CakeEmail', 'Network/Email');
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误致命错误:找不到类'CakeEmail'.

我不确定我哪里出错了.有人可以帮忙吗?

php cakephp cakephp-2.0

16
推荐指数
2
解决办法
9597
查看次数

如何在CakePHP中为一个模型动态使用多个数据库

好吧,我的第一个问题被修改了很多次,我选择删除它并重新构建我的问题.我已经创建了一个具有不同模型名称的小型测试用例项目,以便为我的问题找到合适的解决方案.

警告:不要将数据库混合

动机:我将用户数据分成多个数据库,以解决法律和性能问题.

目前我正在开发一个有多个的CakePHP项目,User每个项目User都有自己的数据库,有多个(cars就是其中一个).现在,我需要先解释一下:

每个User都有自己的数据库(不是表,数据库),所以数据库名称如下.

  • [DATABASE] app(这是应用程序的主数据库)
    • [表] users
    • [表] permissions(与此问题无关)
  • [DATABASE] app_user1(User.id1拥有整个数据库)
    • [TABLE] cars(完全归1 的User.id)
  • [DATABASE] app_user2(User.id2拥有整个数据库)
    • [表] cars(完全由2 拥有的User.id)
  • 等等...

我做了一个小图,它可以澄清数据库/表 -定义及其与模型的关系:

如何在CakePHP中为一个模型动态使用多个数据库

问题!!!

我不知道要连接哪个 …

php mysql cakephp model multiple-databases

16
推荐指数
2
解决办法
2万
查看次数

在哪里注册事件监听器

我正在尝试使用CakePHP v2.1 +中的事件系统

它看起来非常强大,但文档有些模糊.触发事件看起来很简单,但我不知道如何注册相应的监听器来监听事件.相关部分在这里,它提供以下示例代码:

App::uses('CakeEventListener', 'Event');
class UserStatistic implements CakeEventListener {

    public function implementedEvents() {
        return array(
            'Model.Order.afterPlace' => 'updateBuyStatistic',
        );
    }

    public function updateBuyStatistic($event) {
        // Code to update statistics
    }
}

// Attach the UserStatistic object to the Order's event manager
$statistics = new UserStatistic();
$this->Order->getEventManager()->attach($statistics);
Run Code Online (Sandbox Code Playgroud)

但它没有说明这个代码应该驻留在哪里.在特定的控制器内?在app控制器里面?

如果它是相关的,那么监听器将成为我正在编写的插件的一部分.

更新: 这听起来像一种流行的方法是将监听器注册码放在插件的bootstrap.php文件中.但是,我无法弄清楚如何从那里调用getEventManager(),因为应用程序的控制器类等不可用.

更新2: 我还被告知听众可以住在模特里面.

更新3: 最后一些牵引力!以下代码将在MyPlugin/Config/bootstrap.php中成功记录事件

App::uses('CakeEventManager', 'Event'); 
App::uses('CakeEventListener', 'Event');
class LegacyWsatListener implements CakeEventListener {

    public function implementedEvents() {
        return array(
            'Controller.Attempt.complete' => 'handleLegacyWsat',
        );
    } …
Run Code Online (Sandbox Code Playgroud)

php events cakephp cakephp-2.0 cakephp-2.1

16
推荐指数
1
解决办法
5657
查看次数

SQLSTATE [HY000] [1045]使用CakePhp拒绝用户'username'@'localhost'

我是PHP和CakePHP的新手.使用CakePhp连接数据库时发现问题.

以下是我的应用配置.我在Bitnami WAMP堆栈5.4.40-0我使用CakePhp 3.0.4创建一个web mvc应用程序

在我的app.php文件中输入数据源

/**
 * Connection information used by the ORM to connect
 * to your application's datastores.
 * Drivers include Mysql Postgres Sqlite Sqlserver
 * See vendor\cakephp\cakephp\src\Database\Driver for complete list
 */
'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        /**
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment …
Run Code Online (Sandbox Code Playgroud)

php mysql cakephp cakephp-3.0

16
推荐指数
3
解决办法
18万
查看次数

Cakephp 3转换cakephp 2饼干

我们需要在Cakephp 3中阅读Cakephp 2用户cookie.但似乎在更新期间,CakeCookie标签已从cookie中删除.所以每个Cakephp cookie都是分开的.关于这里,Cakephp 3可以读取旧的cookie,如果它们是用AES编写的.但在旧的cakephp中,默认选项是密码,我们的cookie是用密码编写的.所以我们现在不能读旧饼干.

可以选择在Cakephp 2中读取旧cookie并使用AES更新它们.但是当我们更新到Cakephp 3时,会有用户拥有Cakephp 2 cookie.所以我们需要在Cakephp 3中查看这个.

我们计划在cakephp 3中使用密码读取旧cookie,并将其值写入新cookie.我们使用了安全密码方法的代码,并创建了以下代码.

问题是,这段代码适用于字符串,但它在一些嵌套数组上失败了.问题可能是加号或任何其他编码问题.有时候它有效,有时则不然.

我分享了我们的代码来展示我们的流程.您可以提出另一种转换旧cookie的方法.

if (isset($_COOKIE['CakeCookie'])) {
    if (is_array($_COOKIE['CakeCookie'])) {
        foreach ($_COOKIE['CakeCookie'] as $key => $value) {
            $valueDecr=$this->decryptSaltedData($value);
            $this->Cookie->configKey($key, ['expires' => '+60 days']);
            $this->Cookie->write($key, $valueDecr);

            $this->Cookie->delete("CakeCookie[$key]");
            unset($_COOKIE['CakeCookie'][$key]);
            setcookie("CakeCookie[$key]", "aaa", time()-3600, '/');
            setcookie("CakeCookie[$key]", "aaa", time()-3600, '/', '.example.com');
        }
    }
}

public function decryptSaltedData($data) {
    $data2 = substr($data, 8);
    $text = base64_decode($data2);
    $key = Security::salt();

    $cipherSeed='45454545454545454545';
    srand($cipherSeed);

    $out = '';
    $keyLength = strlen($key);
    for ($i = 0, …
Run Code Online (Sandbox Code Playgroud)

php cookies cakephp cakephp-3.0

16
推荐指数
0
解决办法
416
查看次数