我想将我的CakePHP应用程序从2.2版升级到2.3版,我该怎么办?
是否足以覆盖lib文件夹?我检查了差异并注意到app文件夹中也有变化,所以不清楚是否需要更新这些变化.
迁移指南没有关于如何执行升级的信息.
我在用户和联系人上有一个belongsToMany关联.
我想找到给定用户的联系人.我需要类似的东西
$this->Contacts->find()->contain(['Users' => ['Users.id' => 1]]);
Run Code Online (Sandbox Code Playgroud)
该烹饪书讲述了包含条件,定制查找器方法和通过关联键唱歌,但我没有找到如何将这些放在一起.
cakephp associations query-builder conditional-statements cakephp-3.0
CakePHP 3:我有一个数据库字段是DATE(不是DATETIME,也不是TIMESTAMP)
当我显示
echo $contact->date;
Run Code Online (Sandbox Code Playgroud)
它将显示类似2014. 01. 06. 0:00的内容.如何隐藏小时和分钟?
我试过了
print $this->Time->format($contact->date, 'Y-m-d');
Run Code Online (Sandbox Code Playgroud)
但是我得到了2014-0-6
如何获得年月日?
RRD
我有一个帮助器,可以将不同的字符串更改为日期.由此+5成为2012-11-17(从今天起5天),5成为2012-11-05(今年,本月,给定日).
我想在我的控制器中使用相同的东西.
App::uses('EasyDateHelper', 'View/Helper');
App::uses('View', 'View');
$this->View = new View($this->Controller);
$easyDate = new EasyDateHelper($this->View);
Run Code Online (Sandbox Code Playgroud)
这段代码效果很好,但我想知道是否有更好/更简单的方法.
检查是否定义了像obj.prop.otherprop.another这样的对象属性的推荐方法是什么?
if(obj && obj.prop && obj.prop.otherprop && obj.prop.otherprop.another)
Run Code Online (Sandbox Code Playgroud)
这很好用,但足够难看.
有没有办法在afterSave中访问原始数据?我想记录重要数据的变化.
使用$ entity-> isNew()我可以检查它是插入还是更新,但我怎样才能得到改变的内容?
如果特定的find方法在我的Contacts表上有返回值,我想在Notifications表中创建一个条目.
所以在ContactsTable中我创建了一个事件.
use Cake\Event\Event;
public function checkDuplicates()
{
//... some code here
$event = new Event('Model.Contacts.afterDuplicatesCheck', $this, [
'duplicates' => $duplicates
]);
$this->eventManager()->dispatch($event);
}
Run Code Online (Sandbox Code Playgroud)
我在/ src/Event创建了ContactsListener.php
namespace App\Event;
use Cake\Event\Event;
use Cake\Event\EventListenerInterface;
use Cake\Log\Log;
class ContactsListener implements EventListenerInterface
{
public function implementedEvents()
{
return [
'Model.Contacts.afterDuplicatesCheck' => 'createNotificationAfterCheckDuplicates',
];
}
public function createNotificationAfterCheckDuplicates(Event $event, array $duplicates)
{
Log::debug('Here I am');
}
}
Run Code Online (Sandbox Code Playgroud)
在我的NotificationsTable.php中,我有以下代码.
public function initialize(array $config)
{
$this->table('notifications');
$this->displayField('id');
$this->primaryKey('id');
$listener = new ContactsListener();
$this->eventManager()->on($listener);
}
Run Code Online (Sandbox Code Playgroud)
我想这部分是问题,因为我从来没有得到过日志条目.这本食谱还不够清楚,我发现的所有代码与食谱描述的内容不一样,即使对于蛋糕3也是如此.
我应该如何以及在哪里附上听众?
我有两个模型:联系人和具有belongsToMany关联的组.
我想只获得联系人可访问的组.为此,我有一个自定义查找器.
public function findAccessible(Query $query, array $options){
return $query
->where(['admin_user_id' => $options['User.id']])
->orWhere(['public' => true])
->matching('Users', function($q) use ($options){
return $q->orWhere(['Users.id' => $options['User.id']]);
});
}
Run Code Online (Sandbox Code Playgroud)
所以我可以打电话跟随,我会得到我想要的.
$accessibleGroups = $this->Contacts->Groups->find('accessible', ['User.id' => $this->Auth->user('id')]);
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个包含,它将回馈所有组,而不仅仅是可访问的组.
$contact = $this->Contacts->get($id, [
'contain' => ['Groups']
]);
Run Code Online (Sandbox Code Playgroud)
如何限制包含可访问?
我无法将自定义查找器添加到表关联定义的finder属性中,因为我无法在那里传递$ options.或者我可以吗?
在我的开发服务器上/pages/help渲染就好了.但是在制作中它会呈现一个未找到的页面.
所有文件都是相同的,其他一切都有效.
更新:唯一的区别是生产调试是false并且开发调试是真的.我可以通过更改调试值来重现问题.
这是堆栈跟踪
2015-07-08 10:36:44 Error: [Cake\Network\Exception\NotFoundException] Not Found
Request URL: /pages/help
Stack Trace:
#0 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/View/View.php(833): include()
#1 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/View/View.php(793): Cake\View\View->_evaluate('/home/reseller1...', Array)
#2 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/View/View.php(464): Cake\View\View->_render('/home/reseller1...')
#3 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/Controller/Controller.php(582): Cake\View\View->render('help', NULL)
#4 /home/reseller10/domains/1108.cc/private_html/sanga/src/Controller/PagesController.php(63): Cake\Controller\Controller->render('help')
#5 [internal function]: App\Controller\PagesController->display('help')
#6 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/Controller/Controller.php(411): call_user_func_array(Array, Array)
#7 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(114): Cake\Controller\Controller->invokeAction()
#8 /home/reseller10/domains/1108.cc/private_html/sanga/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\PagesController))
#9 /home/reseller10/domains/1108.cc/private_html/sanga/webroot/index.php(37): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#10 {main}
Run Code Online (Sandbox Code Playgroud)