我有一个奇怪的问题.我想在Doctrine 2中关闭代理的自动生成.我发现这行代码应该做(并且做)诀窍:
$config->setProxyDir(APPPATHSYSTEM."/proxies");
$config->setProxyNamespace('Proxies');
// Auto generate proxies for development
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
Run Code Online (Sandbox Code Playgroud)
在我的测试环境中,代理位于应用程序/代理.即:
application/proxies/BaseUserProxy.php
Run Code Online (Sandbox Code Playgroud)
当我在实时环境中时,我的代码突然在application/proxies/Proxies上搜索代理,而不是实际位置.
我确实理解它与命名空间有关,但我不明白为什么它在使用setAutoGenerateProxy方法时表现不同.
有任何想法吗?
编辑
我确实使用以下方法生成新代理:
orm:generate-proxies
Run Code Online (Sandbox Code Playgroud)
选项.
这给了我这个输出:
php doctrine.php orm:generate-proxies
Processing entity "Base\Element"
Processing entity "Base\Page"
...
Processing entity "Base\Site"
Proxy classes generated to "/var/www/application/proxies"
Run Code Online (Sandbox Code Playgroud)
查看最后一行,代理在/ var/www/application/proxies中生成.目录列表如下所示:
BaseElementProxy.php
BasePageProxy.php
...
BaseSiteProxy.php
Run Code Online (Sandbox Code Playgroud)
所以没有额外的Proxies目录.但是,当我刷新我认为有的网页时,它会给我以下错误:
Warning: require(/var/www/application//proxies/Proxies/BaseUserProxy.php)
[function.require]: failed to open stream:
No such file or directory in /var/www/library/Doctrine/Common/ClassLoader.php on line 148
Run Code Online (Sandbox Code Playgroud)
为什么要添加额外的Proxies目录?如果我确实在每个请求上生成代理,则它不会在额外的Proxies目录中查找.任何人?
@Bryan M.:这不是解决方案,而是解决方法.此外,它不起作用.在生成代理时,如果应用您的建议,它们将在APPPATHSYSTEM中生成,我的webapp将尝试从APPPATHSYSTEM加载它们."Proxies".问题是,如果我使用,系统会在不同位置查找代理:
$config->setAutoGenerateProxyClasses(DEVELOPMENT);
Run Code Online (Sandbox Code Playgroud)
如果开发是真的,它将查看APPPATHSYSTEM.如果DEVELOPMENT设置为false,它将查看APPPATHSYSTEM."Proxies".只是切换开发常量会破坏我的应用程序,理论上应该是不可能的.
我忙于Doctrine2,但我无法让它工作.
使用sqlite开箱即用的一切都很好.但是当我尝试将沙箱演示中的数据库更改为MySQL时,我感到困惑.这就是我做的.我创建了一个数据库,将connectionOptions数组更改为:
$connectionOptions = array(
'driver' => 'pdo_mysql',
'path' => __DIR__.'/mysql.php'
);
Run Code Online (Sandbox Code Playgroud)
'path'条目存在,看起来像这样:
$connectionParams = array(
'dbname' => 'db_test',
'user' => 'test',
'password' => 'p4ssw0rd',
'host' => 'localhost',
'driver' => 'pdo_mysql',
);
Run Code Online (Sandbox Code Playgroud)
当我运行命令来创建数据库时:
php doctrine orm:schema-tool:create
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
no database selected
Run Code Online (Sandbox Code Playgroud)
似乎是一个明确的信息.但是我如何更改数据库名称,因为mysql.php中指定的那个(见上文)确实是excist,应该是它使用的那个!我搜索了几个小时,但我无法在任何地方找到它.
在我正在研究的symfony2项目中,有时在调用flush我的实体管理器时会发生死锁.这导致例外.大多数情况下,此错误只发生一次,第二次尝试插入相同的数据正常工作.
有没有一种好方法可以再次执行(刷新)同一个事务.很简单
$em->flush();
Run Code Online (Sandbox Code Playgroud)
不会这样做,因为如果发生错误,实体经理会被关闭.
我发现https://github.com/doctrine/doctrine2/pull/806位没有提供解决方案.
为什么switch语句中不包含break的case选项会在没有check的情况下自动转发到下一个case?
try {
switch($param) {
case "created":
if(!($value instanceof \DateTime))
throw new \Exception("\DateTime expected, ".gettype($value)." given for self::$param");
case "Creator":
if(!($value instanceof \Base\User)) {
throw new \Exception(get_class($value)." given. \Base\User expected for self::\$Creator");
}
default:
$this->$param = $value;
break;
}
} catch(Exception $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
如果param是"创建的",它将在创建的案例中进行检查,这很好.当检查成功时,我希望代码继续使用默认选项,这就是没有中断的原因; 但相反,它继续"创造者"而$ param!="创造者"!
我知道如何解决这个问题(只是在我的情况下"创建"添加默认代码),但我不喜欢经常重复该代码.我的实际问题是:为什么在案例不是"创作者"的情况下继续使用"创作者"案例.
我使用Eclipse(Helios)与PDT和EGit.我有一个没有版本控制的项目,所以我通过执行以下操作为它创建了一个git存储库:
Team -> Share Project
Run Code Online (Sandbox Code Playgroud)
当我尝试将项目的文件添加到存储库时:
Team -> Add
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
Failed to add resource to index
Failed to add resource to index
Exception caught during execution of add command
Run Code Online (Sandbox Code Playgroud)
当我在命令行上手动添加文件时,一切正常.
有任何想法吗?
编辑:
eclipse给出的错误是:
Caused by: org.eclipse.jgit.errors.ObjectWritingException: Unable to create new object: Z:\eage_layout\.git\objects\60\f30dd232bd6ddaeb198fb11400c2613a072189
at org.eclipse.jgit.storage.file.ObjectDirectoryInserter.insert(ObjectDirectoryInserter.java:100) at org.eclipse.jgit.api.AddCommand.call(AddCommand.java:177)
Run Code Online (Sandbox Code Playgroud)
我正在运行的代码位于CentOs上运行的虚拟机上.我正在使用Windows机器并使用samba共享来访问虚拟机上的代码.我已将.git目录上的文件系统权限设置为777,但它仍然无效.
我有这个方法:
public function search($searchKey=null, $summary=null, $title=null, $authors=null, $paginationPage=0) {
...
}
Run Code Online (Sandbox Code Playgroud)
我正试图用这个检索所有参数:
$Class = new Search();
// Get parameters
$ReflectionMethod = new \ReflectionMethod($Class, "search");
try {
foreach($ReflectionMethod->getParameters() AS $Parameter) {
if(array_key_exists($Parameter->name, $this->params)) {
$parameters[$Parameter->name] = $this->params[$Parameter->name];
} elseif($Parameter->isDefaultValueAvailable()) {
$paramaters[$Parameter->name] = $Parameter->getDefaultValue();
} else {
...
}
} catch(\Exception $e) {
...
}
// Call function
return call_user_func_array(array($Class, "search"), $parameters);
Run Code Online (Sandbox Code Playgroud)
我$this->params有这样的内容:
array
'paginationPage' => int 2
'id' => int 30
'searchKey' => string 'test' (length=4)
Run Code Online (Sandbox Code Playgroud)
因为$ summary,$ title和$ …
我想选择即将到来的5天过生日的所有员工.生日保存在日期字段中.感觉就像我必须使用之间,但是年份范围会破坏结果.
基本上我想在5天的范围内按月和日选择日期.
数据库方案:
CREATE TABLE IF NOT EXISTS `tbl_office_employee` (
`id` int(11) NOT NULL auto_increment,
`firstname` varchar(256) collate utf8_unicode_ci default NULL,
`surname` varchar(256) collate utf8_unicode_ci default NULL,
`birthdate` date NOT NULL,
`telephone` varchar(256) collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)
有人知道一个查询来完成这个吗?
我有一个wordpress网站,并希望使用jquery加载我的页面.我只想加载内容div,所以我将这个url传递给你:
var url = $(this).attr('href') + "#content";
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用ajax加载页面时,它会加载没有#content部分的url.现在它将整个页面加载到我的div而不是只有我想要的部分.
也许它与我的.htaccess有关:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# RewriteRule ^index\.php$ - [L]
RewriteRule ^(index\.php/?|intro.html)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我得到了以下css:
div#header, header {
height: 88px;
width: 100%;
background-image: url('/images/header.jpg');
background-repeat:no-repeat;
}
Run Code Online (Sandbox Code Playgroud)
以下HTML:
<header></header>
<div id="header"></div>
Run Code Online (Sandbox Code Playgroud)
第二个HTML行完全符合我的要求.但是,第一个html行(<header>)没有.
我正在使用Firefox 3.6.8.在firebug中,html-line的标记看起来完全一样.在Internet Explorer中我遇到了同样的问题.只有Chrome会按预期显示代码.
我现在很困惑.如何解决这个问题?