CakePHP是一个面向PHP的开源Web快速开发框架,它为开发,维护和部署应用程序提供了可扩展的体系结构。它使用公知的设计模式,如MVC和ORM,在约定范围内超过配置范例。
使用 CakePHP 2.6.7 当使用 wkhtmltopdf 生成 PDF 时,我可以简单地从命令行 wkhtmltopdf http://url/of/my/website some_name.pdf 运行,但我找不到在这个 ma 中传递 URL 的方法...
我想根据数据库数据验证邮政编码是否需要国家/地区以及哪种格式。 我目前在模型中有以下验证规则。唯一的问题是...
CakePHP - Sanitize::clean 留下 & 和
我对 cakePHPs Sanitize::clean() 方法到底应该做什么有点困惑。目前,当我添加记录时,我正在这样做: $this->请求->数据 = Sanitize::clean($this->
我正在做一个非常大的项目。我当前正在研究的方面要求,当其他用户将电子邮件模板添加到学习课程时,将电子邮件模板发送给用户。 控制器
如果我通过 GET url,我会遇到 cakephp 分页问题 如果我不添加使用 GET 参数,一切都会正常工作 像这样 第 2 页 域/imsystem/admin/remuneration_points/#admin/remuneration_points/
我想在视图中对自定义数组进行分页。我的控制器和视图代码如下。 控制器代码: 公共函数admin_detail(){ $totalByDate = $this->Pbscodemetric->fi...
我正在尝试使用蛋糕烘焙控制台,当我使用蛋糕烘焙模型时 我收到以下错误 考勤表结构 如果不存在`mydb`则创建表。`attendences` ( `id` 我...
CakePHP 删除 saveAll 上的其他 HABTM 记录
我有两个与 HABTM 相关的模型:缺勤和用户。对于上下文,用户申请缺勤(因此,用户别名为申请人,缺勤别名为缺勤应用)。我正在努力
我有一个网站,对 SEO 有一些严格的要求。 主要的是将所有 http 请求重定向到 https,我通过将其添加到 AppController 中来完成此操作: 公共职能
我试图在我的字段中查找计数并连接该计数,但它给出错误消息,因为找不到 make_count 并且我在上面创建了相同的字段。 $this->汽车->virtualFields['
CakePHP 3 分页器在 ORDER 子句中使用 FIELD()
我有一个关于 CakePHP3 (3.0.13) 的分页器组件的问题。我正在使用 MYSQL 函数 FIELD() 来排序我的数据,如下所示: $this->分页 = array_merge_recursive([ '条件...
我的身份验证组件在过去一年中一直运行良好。大约两个小时前,我登录了我的网站,并做了一个小小的更改。我下车了两个小时,自从我回来后......
所以我将根据选定的月份创建搜索数据,所以问题是当二月的日期有29时,我想要该月的日期之后的那一天。我使用 cakephp 与
我正在构建一个 CakePHP 2.3 应用程序,但我一生都无法弄清楚为什么 saveAll 不断失败。 我有以下型号: 艺术家有很多艺术家预览 ArtistPreview 属于 Artis...
我正在将 Vimeo Player 与我的 cakephp 应用程序集成,它给了我上述错误 错误:在非对象上调用成员函数 getEmbedHtml() 文件:C:\wamp\www nn pp\View\Videos\...
CakePHP 2.1:使用组件重定向时,使用 $this->testAction() 测试控制器时,$this->headers 未设置
我开始为应用程序编写测试,并且我已经制作了一个包装器 RedirectComponent 来处理所有重定向。 现在我开始测试我的应用程序(我对测试还很陌生)我
在我看来,我有 2 个按钮,一个在表单中,用于根据下拉列表过滤数据,另一个用于将过滤后的数据导出到 Excel。 在我看来,我有 2 个按钮,一个在表单中用于根据下拉列表过滤数据,另一个用于将过滤后的数据导出到 Excel。 <?php $options = array(); $options[0] = 'All'; $options[1] = 'Due last 6 months'; $options[2] = 'Due current month'; $options[3] = 'Due next 3 months'; $options[4] = 'Due next 6 months'; $options[5] = 'Due next 12 months'; ?> <div class="row"> <?= $this->Form->create() ?> <fieldset> <div class="row"> <div class="col-xs-3"><?= $this->Form->input('select_period_id', ['options' => $options, 'empty' => false, 'label' => __('Select Period')]) ?></div> <div class="col-sm-2" style="padding-top:25px;"><?= $this->Form->button(__('Search'), ['class' => 'btn btn-primary']) ?></div> </div> </fieldset> <?= $this->Form->end() ?> </div> <div class="timetables index large-9 medium-8 columns content"> <?= $this->Html->link(__('Export to xlsx'), array_merge($this->request->query, ['_ext' => 'xlsx']), ['class' => 'btn btn-primary']) ?> </div> 我假设第一个按钮是 POST,第二个按钮是 GET。 我可以使用第一个按钮获得过滤后的数据,但不能使用第二个按钮: $data = $this->request->data; $select_period = $this->request->data('select_period_id'); $today = Time::now()->format('Y-m-d'); $second_date = Time::now(); $assetsAssignations = $this->AssetsAssignations->find() ->contain(['Assets']); if($this->request->is(['patch', 'post', 'put'])) { if ($select_period == 0) { $second_date = $second_date->modify('-6 months'); $second_date = $second_date->format('Y-m-d'); } elseif ($select_period == 1) { $second_date = $second_date->modify('-6 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'end_date >=' => $second_date, 'end_date <=' => $today ]); // etc.. } elseif($this->request->is(['get'])) { ??? } $_filename = "xls_report_replacement_" . date('Ymd'); $this->set(compact('assetsAssignations', '_filename')); } 我没有找到导出到 Excel 按钮 (GET) 时应该放什么。 请问有什么帮助吗? _ 更新:我尝试了这个,打开excel文件时出现错误 { $data = $this->request->data; $select_period = $this->request->data('select_period_id'); $today = Time::now()->format('Y-m-d'); $second_date = Time::now(); $assetsAssignations = $this->AssetsAssignations->find() ->contain('Assets'); debug($this->request->data); if (isset($this->request->data['btn1'])) { if ($select_period == 0) { $second_date = $second_date->modify('-6 months'); $second_date = $second_date->format('Y-m-d'); } elseif ($select_period == 1) { $second_date = $second_date->modify('-6 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $second_date, 'Assets.life_end_date <=' => $today ]); } elseif ($select_period == 2) { $second_date = $second_date->modify('1 month'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } elseif ($select_period == 3) { $second_date = $second_date->modify('3 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } elseif ($select_period == 4) { $second_date = $second_date->modify('6 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } elseif ($select_period == 5) { $second_date = $second_date->modify('12 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } } elseif (isset($this->request->data['btn2'])) { if ($select_period == 0) { $second_date = $second_date->modify('-6 months'); $second_date = $second_date->format('Y-m-d'); } elseif ($select_period == 1) { $second_date = $second_date->modify('-6 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $second_date, 'Assets.life_end_date <=' => $today ]); } elseif ($select_period == 2) { $second_date = $second_date->modify('1 month'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } elseif ($select_period == 3) { $second_date = $second_date->modify('3 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } elseif ($select_period == 4) { $second_date = $second_date->modify('6 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } elseif ($select_period == 5) { $second_date = $second_date->modify('12 months'); $second_date = $second_date->format('Y-m-d'); $assetsAssignations->where([ 'Assets.life_end_date >=' => $today, 'Assets.life_end_date <=' => $second_date ]); } debug($select_period); die(); return $this->redirect(['action' => 'test.xlsx']); } $_filename = "xls_report_replacement_" . date('Ymd'); $this->set(compact('assetsAssignations', '_filename')); } 在我看来,我在表单中包含了第二个按钮: <div class="row"> <?= $this->Form->create('form_name') ?> <fieldset> <div class="row"> <div class="col-xs-3"><?= $this->Form->input('select_period_id', ['options' => $options, 'empty' => false, 'label' => __('Select Period')]) ?></div> <div class="col-sm-2" style="padding-top:25px;"><?php echo $this->Form->submit('Search', array('name'=>'btn1'))?></div> <div class="col-sm-2" style="padding-top:25px;"><?php echo $this->Form->submit('Excel', array('name'=>'btn2'))?></div> </div> </fieldset> <?= $this->Form->end() ?> </div> 当我使用第一个按钮进行调试时: [ 'select_period_id' => '1', 'btn2' => 'Excel' ] select_period_id = '1' 使用 Excel 按钮调试: [ 'select_period_id' => '2', 'btn2' => 'Excel' ] select_period_id = '2' 通过在生成 xlsx 文件时包含调试语句,您会破坏输出。如果不带任何参数重定向到 test.xlsx,您将丢失发布的数据。你可以搞乱这样的事情: $this->redirect(['action' => 'test.xlsx', 'select_period_id' => $select_period]) 但这很丑。无需重定向,只需设置响应类型,如下所示: $this->RequestHandler->renderAs($this, 'xlsx'); 此外,你还有很多重复的代码;其中大部分是可以消除的。 并且您不需要在将日期传递给查询生成器之前设置日期格式,方法是从 Time 类切换到 Date。 这是我建议的版本: { $data = $this->request->data; $select_period = $this->request->data('select_period_id'); $today = FrozenDate::now(); $assetsAssignations = $this->AssetsAssignations->find() ->contain('Assets'); // This block could be done with a switch instead of if-elseif if ($select_period == 0) { $start_date = $end_date = null; } elseif ($select_period == 1) { // Alternately, $start_date = $today->subMonths(6); $start_date = $today->modify('-6 months'); $end_date = $today; } elseif ($select_period == 2) { $start_date = $today; // Alternately, $start_date = $today->addMonth(); $end_date = $today->modify('1 month'); } elseif ($select_period == 3) { $start_date = $today; // Alternately, $start_date = $today->addMonths(3); $end_date = $today->modify('3 months'); } elseif ($select_period == 4) { $start_date = $today; $end_date = $today->modify('6 months'); } elseif ($select_period == 5) { $start_date = $today; $end_date = $today->modify('12 months'); } if ($start_date) { $assetsAssignations->where([ 'Assets.life_end_date >=' => $start_date, 'Assets.life_end_date <=' => $end_date ]); } // Personally, I'd rename this from btn2 to something like xlsx, here and in the form template if (isset($this->request->data['btn2'])) { $this->RequestHandler->renderAs($this, 'xlsx'); } $_filename = "xls_report_replacement_" . date('Ymd'); $this->set(compact('assetsAssignations', '_filename')); } 如您所见,代码更短,并且功能应该相同。 更新:在控制器中,在顶部添加: use Cake\I18n\FrozenDate;
我正在上传文件,我想告诉用户是否要删除或覆盖他以前的文件...所以我想在删除之前从控制器操作中显示一个弹出窗口,所以如果用户说是,那么.. .
CakeDC 评级插件 - 任何地方都有教程/说明吗? [已关闭]
是否有关于 CakeDC 评级插件的良好教程/说明? 我在网站上呆了 4 个小时,但仍然没有结束 - 自述文件毫无用处。
我在数据库表中使用排序列。 每当我保存新的数据条目时,我想选择排序的最大计数并将这个新的排序编号与新条目一起保存。 我怎么...