我必须开发一个每天必须容纳大约2000个用户的站点,速度是它的标准.此外,该站点是一个面向用户的站点,用户可以登录并查看他的个人资料,注册他/她想要参与的特定事件.该站点将托管在VPS服务器上.虽然我很漂亮有python和PHP的良好经验,但我不知道如何使用任何一个框架.我们有足够的时间来试验和学习上述框架之一.请注意,考虑到网站的速度,功能和安全性,请考虑哪种方案适合这种情况.
谢谢,niting
我正在开发CakePHP 2项目.它最初从2.0.x开始,然后最近迁移到2.1.0.在整个开发过程中,我一直收到以下错误消息.
它不可预测地弹出页面顶部.它可能是我只是在查看不同的页面,甚至在我向数据库添加记录之后(但记录正确保存).
Warning:
SplFileInfo::openFile(/var/www/cake_prj/app/tmp/cache/persistent/cake_core_cake_console_):
failed to open stream:
Permission denied in
/var/www/cake_prj/lib/Cake/Cache/Engine/FileEngine.php on line 293
Run Code Online (Sandbox Code Playgroud)
我以递归方式将tmp文件夹的所有者和组设置为apache,并仍然收到该消息.另外,我然后递归地设置读取,写入和执行所有权限(chmod 777).错误消息仍然会弹出.
即使在更改了所有者,组和权限之后,相关文件仍然存在:
cake_prj/app/tmp/cache/persistent/cake_core_cake_console_
Run Code Online (Sandbox Code Playgroud)
将其所有者和组设置回root,并将其权限设置回默认值.
什么可能导致这个问题?有没有办法确保每次生成此文件时,它始终都是apache:具有读/写/执行权限的apache?
如何在CakePHP中的组件中使用模型?
在控制器中,您可以使用
public $uses = array(...);
Run Code Online (Sandbox Code Playgroud)
但这在组件中不起作用.
什么
我在使用phpunit v5.1.3的CakePHP v3.x上.我的单元测试似乎没有认识到我的灯具的存在.看来测试是从local(default)数据库连接读取的.
这是我的TestCase类:
namespace App\Test\TestCase\Model\Table;
use Cake\Datasource\ConnectionManager;
use Cake\I18n\Time;
use Cake\ORM\TableRegistry;
use Cake\TestSuite\TestCase;
/**
* App\Model\Table\ScreensTable Test Case
*
* @property \App\Model\Table\ScreensTable ScreensTable
*/
class ScreensTableTest extends TestCase
{
/**
* Fixtures
*
* @var array
*/
public $fixtures = [
'app.screens'
];
/**
* setUp method
*
* @return void
*/
public function setUp()
{
parent::setUp();
$config = TableRegistry::exists('Screens') ? [] : ['className' => 'App\Model\Table\ScreensTable'];
$this->Screens = TableRegistry::get('Screens', $config);
}
public testSomethingHere(){
$newScreen = $this->Screens->newEntity(['who' => …Run Code Online (Sandbox Code Playgroud) 我正在节省时间,从名为ItemView的模型中保存最简单的记录:
if($this->save($this->data)) {
echo 'worked';
} else {
echo 'failed';
}
Run Code Online (Sandbox Code Playgroud)
其中$ this->数据是:
Array
(
[ItemView] => Array
(
[list_id] => 1
[user_id] => 1
)
)
Run Code Online (Sandbox Code Playgroud)
我的表是:
CREATE TABLE IF NOT EXISTS `item_views` (
`id` int(11) NOT NULL auto_increment,
`list_id` int(11) NOT NULL,
`user_id` int(11) default NULL,
`user_ip` int(10) unsigned default NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)
在调试模式下查看查询转储,Cake甚至没有尝试INSERT,所以我不知道如何调试.
任何帮助,将不胜感激.
假设我在视图中看到这样的字段:
<li class="bigfield">
<?php echo $form->input('phone', array(
'placeholder' => 'Phone',
'label' => false,
'between' => '<br />'
)); ?>
</li>
Run Code Online (Sandbox Code Playgroud)
如果我在此字段上有验证规则并且验证失败,我会看到以下HTML:
<li class="bigfield">
<div class="input text required error">
<br>
<input name="data[Appointment][email]" type="text" placeholder="Email"
maxlength="45" value="" id="AppointmentEmail" class="form-error">
<div class="error-message">Please enter a valid email address</div>
</div>
</li>
Run Code Online (Sandbox Code Playgroud)
我很喜欢做这样的事情的错误消息的div移动到页面的整个不同的组成部分,而然后用相同<LI>与字段本身里面有它.这样做最直接的方法是什么?
我正在尝试使用CakePHP paginate()方法在SQL查询中使用"HAVING"子句.
经过一些搜索,看起来这是无法通过Cake的paginate()/ find()方法实现的.
我的代码看起来像这样:
$this->paginate = array(
'fields' => $fields,
'conditions' => $conditions,
'recursive' => 1,
'limit' => 10,
'order' => $order,
'group' => 'Venue.id');
Run Code Online (Sandbox Code Playgroud)
其中一个$字段是别名"distance".我想在距离<25时添加查询(例如,距离<25).
到目前为止,我已经看到了两个解决方法,不幸的是,这两个方法都不适合我 我见过的两个是:
1)在"group"选项中添加HAVING子句.例如'group' => 'Venue.id HAVING distance < 25'.当与分页结合使用时,这似乎不起作用,因为它会混淆执行的初始计数查询.(即尝试SELECT distinct(Venue.id HAVING distance < 25)哪个显然是无效的语法.
2)在WHERE条件之后添加HAVING子句(例如WHERE 1 = 1 HAVING field > 25)这不起作用,因为看起来HAVING子句必须在 Cake生成的查询中的WHERE条件之后放置的组语句之后.
有没有人知道使用CakePHP的find()方法做到这一点的方法?我不想使用query(),因为这会涉及大量的返工,也意味着我需要实现自己的分页逻辑!
提前致谢
我的CakePHP应用程序出现问题.这似乎只发生在IE中,并且仅在某些计算机上发生.虽然它在计算机上是一致的.
问题一: 用户已登录并在页面https://example.com/users/view上点击退出.用户被重定向到http://example.com并且似乎已注销,直到用户访问另一个https页面并且他们仍然登录.他们可以根据需要单击注销,但他们始终登录https并且只能在http上注销.
问题二: 用户登录https://example.com/users/signin,他们会被重定向到http://example.com,现在似乎已登录.用户访问https://example.com/admin/幻灯片,但现在还不知道,但现在已注销,点击任何其他页面(或只是刷新当前页面)将要求他们再次登录.
我不知道是怎么回事.我已经阅读并尝试了在这两个类似问题上描述的解决方案:从ssl转移到非ssl时会话不保存,而在IE中不更新/覆盖Cookie但我仍然遇到同样的问题.
到目前为止,我注意到的唯一线索(并且我不知道这是否意味着什么)就是当我在HTTP页面上调试时$_SESSION,$this->Session->read()总是只有$ this-> Session-> read()返回一个值.在HTTPS页面上,有些ALWAYS总是为两者返回相同的值,其他ALWAYS只返回$ this-> Session-> read()的值.
例如,http://example.com和https://example.com/users永远不会看到$ _SESSION,https://example.com/carts总是会看到$ _SESSION.我不确定,但我在想,也许安全页面可能会看到它,因为有些可能不会出现问题,但是当我检查代码时,我看到没有区别,这表明为什么一个人做,一个人没有吨.
此外,如果我$this->Session->destroy()在AppController中添加到beforeFilter,那么所有页面甚至HTTP都可以看到$ _SESSION.我实际上并没有在我的应用程序中使用$ _SESSION,我只是觉得这可能是一个错误的线索.
UPDATE
我接受了Gustav Bertram的建议并查看了用户代理字符串.我在没有问题的计算机上将用户代理字符串与IE上的IE进行了比较.它们是相同的,除了有问题的用户代理字符串中有"google chrome frame".我从该计算机上卸载了Google Chrome Frame,重新启动,再次尝试,问题似乎已经解决了.
如果这是真正的原因,那么简单的解决方案就是让用户卸载Chrome框架.但是我想知道是否有一个解决方案可以让他们安装镀铬框架并且仍然有效.
我需要以老式的upload-unzip-run方式安装CakePHP 3 .
我从下载的档案文件的CakePHP/CakePHP的/标签不包含默认文件夹一样webroot,Model等等,这意味着它是不完整的.
在官方文档不涉及此.这是我发现的相关Github问题,但该人最终仍在使用Composer.
还有cakephp/app,似乎包含那些丢失的文件,但是在cakephp/cakephpcomposer.json中没有提到,即使我下载它,我也不知道如何合并软件包.
请帮忙
cakephp ×10
php ×3
cakephp-3.0 ×2
acl ×1
cakephp-1.3 ×1
cakephp-2.0 ×1
cakephp-2.1 ×1
cakephp-2.x ×1
composer-php ×1
cookies ×1
django ×1
installation ×1
mysql ×1
permissions ×1
phpunit ×1
python ×1
session ×1
unit-testing ×1
validation ×1
yii ×1