使用CakePHP:
我有多对一的关系,让我们假装它是很多叶子到树.当然,我烘焙了一个表单来向树中添加一个Leaf,你可以使用表单助手创建的下拉框(标记)指定它是哪个树.
唯一的一点是,SELECT框始终默认为Tree#1,但我希望它默认为它被添加到的树:
例如,调用example.com/leaf/add/5将调出接口以向树#5添加新的Leaf.Leaf.tree_id默认为"Tree 5" 的下拉框,而不是它当前默认为"Tree 1".
我需要在Leaf控制器和Leaf view/add.ctp中执行此操作吗?
我有兴趣了解人们如何部署CakePHP应用程序.我最近接触过一些自由开发的CakePHP开发,这对我来说是一个很好的机会,可以在表示层获得一些经验(在我的FT工作中,我在业务和持久层中进行Java EE开发).
我的想法在这一点上有点混乱,但我正在考虑以下场景:
在IDE中工作的开发人员修改文件,该文件自动(在后台)与本地运行的开发Web服务器同步.这种情况是我理想地喜欢进行开发的方式...进行更改并能够在没有任何额外步骤的情况下查看操作中的更改.
在IDE中工作的开发人员修改一个文件,该文件通过FTP与远程运行的开发Web服务器自动(在后台)同步.当我使用我的上网本(它运行我的IDE足够慢,因为它没有混合中的Web服务器)时,这种情况会很有用.
我最熟悉的开发工具是Eclipse,Ant和Subversion.我的偏好是继续使用它们,但我会考虑切换,如果这样做可以很容易地实现这些场景.
问题:
对于一篇文章中的这么多问题感到抱歉,但我认为这些问题都是相关的,并认为将讨论集中在一个地方是有用的.
我想知道如何只处理一个身份验证过程和多个表中的"用户".我有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) 我有一个简单的开发网站,我想学习PHP.我希望该网站安全,可扩展且易于维护.我应该同时学习框架和PHP吗?如果我构建一个框架,将会有许多不熟悉的代码.你会说这增加了安全隐患吗?
我想编写一个蛋糕shell,使用mysqldump对我的数据库进行夜间备份.我可以将它作为一个shell脚本,但是如果我可以将它塞进一个CakePHP shell中,那么我将获得它在开发和实时服务器上工作的额外好处,如果我可以让它自动读取我的数据库配置设置.我会把蛋糕壳做成cron,并且知道我经常备份我的数据库时会有一些安心.
在我的shell中,我正在尝试构建一个以"mysqldump --user ="开头的字符串,我想从app/config/database.php获取用户名.我怎样才能获得database.php中的数据?
在我的控制器中,我正在使用具有以下代码的电子邮件功能:
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'.
我不确定我哪里出错了.有人可以帮忙吗?
好吧,我的第一个问题被修改了很多次,我选择删除它并重新构建我的问题.我已经创建了一个具有不同模型名称的小型测试用例项目,以便为我的问题找到合适的解决方案.
警告:不要将数据库与表混合
动机:我将用户数据分成多个数据库,以解决法律和性能问题.
目前我正在开发一个有多个的CakePHP项目,User每个项目User都有自己的数据库,有多个表(cars就是其中一个表).现在,我需要先解释一下:
每个User都有自己的数据库(不是表,数据库),所以数据库名称如下.
app(这是应用程序的主数据库)
users permissions(与此问题无关)app_user1(User.id1拥有整个数据库)
cars(完全归1 的表User.id)app_user2(User.id2拥有整个数据库)
cars(完全由2 拥有的表User.id)我做了一个小图,它可以澄清数据库/表 -定义及其与模型的关系:

问题!!!
我不知道要连接哪个 …
我正在尝试使用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和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) 我们需要在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) cakephp ×10
php ×7
cakephp-2.0 ×2
cakephp-3.0 ×2
mysql ×2
cakephp-1.3 ×1
cakephp-2.1 ×1
cakephp-2.x ×1
cookies ×1
deployment ×1
events ×1
helpers ×1
model ×1
scalability ×1
security ×1
symfony1 ×1