远程git仓库只是克隆使用本地箱Atlassian的SourceTree.即使工作树中没有真正修改过任何文件,Atlassian也会立即在"未提交的更改"下列出一堆文件.每个文件显示删除和添加的相同行数,此计数等于文件中行的总数.这会以某种方式暗示我们正在遇到某种线路结束问题.
但是,存储库.gitattribute包含
# Set default behaviour, in case users don't have core.autocrlf set.
* text=auto
Run Code Online (Sandbox Code Playgroud)
根据GitHub文章处理行结尾应该明确地core.autocrlf为存储库确定.但也~/.gitconfig包含autocrlf = true.
如果尝试将修改后的文件"恢复"回到先前的提交,则无效.相同的文件仍被视为未提交.
已将存储库克隆到多个位置,并确保没有文件位于同一路径中,以确保SourceTree或git不记得旧文件.
该存储库与Windows,Linux和OSX盒子协作.此问题仅出现在OSX中.
SourceTree/repository/git设置中可能还有什么问题?
更新#1,20.2013年4月
由于还有一些问题,这里有部分输出git config --list.
来自SourceTree控制台(OSX)
core.excludesfile=/Users/User/.gitignore_global
core.autocrlf=input
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.cmd=/Applications/SourceTree.app/Contents/Resources/opendiff-w.sh "$LOCAL" "$REMOTE" -ancestor "$BASE" -merge "$MERGED"
mergetool.sourcetree.trustexitcode=true
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.autocrlf=true
Run Code Online (Sandbox Code Playgroud)
以下是Windows端的相应输出:
core.symlinks=false
core.autocrlf=false
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
http.proxy=
core.autocrlf=true
core.repositoryformatversion=0
core.filemode=false …Run Code Online (Sandbox Code Playgroud) 互联网有很多讨论,apc_cache_clear()在CLI中调用不会清除"web"PHP进程中的操作码缓存,无论它们是在Apache内部运行还是由FPM运行(请参阅如何清除APC缓存条目?).作为建议的解决方案,可以创建一个简单的PHP页面来调用apc_cache_clear(),并从CLI调用它.Symfony的ApcBundle就是这么做的.
如果apc_cache_clear()CLI不从Apache/FPM清空缓存,那么它是否在FPM工作者之间?如果我通过HTTP调用/clear_apc_cache.php,它只由一个FPM工作进程运行.那么,APC操作码缓存是否真正在池和工作人员之间共享 - 更具体:它是否自动从所有工作人员中清除?
我创建了一个Symfony2表单并将其绑定到Request.在继续表单的其余部分之前,我需要明确确保CSRF令牌是否有效/无效.
$form['_token']->isValid()抛出OutOfBoundsException消息"Child _token不存在".
我仍然可以验证渲染的表单是否包含_token字段.如果CSRF值无效,则$form->isValid()返回false.
我在这里错过了什么?
更新1:
控制器(部分):
private function buildTestForm() {
$form = $this->createFormBuilder()
->add('name','text')
->getForm();
return $form;
}
/**
* @Route("/test/show_form", name="test.form.show")
* @Method("GET")
*/
public function showFormTest()
{
$form = $this->buildTestForm();
return $this->render('TestBundle::form_test.html.twig', array('form' => $form->createView()));
}
/**
* @Route("/test/submit_form", name="test.form.submit")
* @Method("POST")
*/
public function formTest()
{
$form = $this->buildTestForm();
$form->bind($this->getRequest());
if ($form['_token']->isValid()) {
return new Response('_token is valid');
} else {
return new Response('_token is invalid');
}
}
Run Code Online (Sandbox Code Playgroud)
模板 …
我想在我的Symfony2应用程序中从数据库加载某些Twig模板,同时仍然保留使用本机加载器在标准文件系统位置呈现模板的可能性.怎么做到这一点?
据我所知,没有可能在Twig环境中注册多个加载器.我一直在想两种方式(现在):
更新1:
似乎Twig支持可以在我的第一个选项中使用的Twig_Loader_Chain类.仍然,默认加载器应该是可访问的并作为第一个选项传递给链.
您可以在下方看到两个简化的摘要,其结果不会发生变化.
模式1,从头开始的对象:
foreach ($recipients as $recipient) {
$message = new Message();
$message->setBody("This is the body of the message.");
$message->setRecipient($recipient);
$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
Run Code Online (Sandbox Code Playgroud)
模式2,克隆原型对象:
$prototype = new Message();
$prototype->setBody("This is the body of the message.");
foreach ($recipients as $recipient) {
$message = clone $prototype;
$message->setRecipient($recipient);
$transport->sendMessage($message);
$persister->saveToDatabase($message); // Updated line
unset($message);
}
unset($prototype);
Run Code Online (Sandbox Code Playgroud)
在内存使用,垃圾收集和/或CPU周期方面,对象克隆(模式2)是否提供了从头开始创建对象(模式1)的性能改进?还要考虑大量固定属性(在实例之间不会更改)和大量循环.
更新:我需要在每个循环中使用不同的对象实例.我添加saveToDatabase了对示例的调用以使其类似,例如,让它为消息提供ID.;)
我使用Symfony2的JMSI18nRoutingBundle来允许我的路由自动国际化.可以在routing.yml中禁用单个路由国际化,如下所示
index:
pattern: /
defaults: { _controller: AcmeBaseBundle:Welcome:indexRedirector }
options:
i18n: false
Run Code Online (Sandbox Code Playgroud)
但是,我通常在控制器中注释路由并在routing.yml中只定义一个前缀:
AcmeApiBundle:
resource: "@AcmeApiBundle/Controller/"
type: annotation
prefix: /api
options:
i18n: false
Run Code Online (Sandbox Code Playgroud)
在这种情况下,禁用国际化无法正常工作,只有通过添加区域设置作为URL的前缀才能匹配路由.
如何禁用捆绑中所有URL的国际化?
我使用Symfony2.1的FormBuilder在控制器中创建一个动态表单:
$form = $this->createFormBuilder($defaultData);
$form->add('field','text');
Run Code Online (Sandbox Code Playgroud)
我想以同样的方式嵌入另一个表单并将其嵌入主表单中.
$subForm = $this->createFormBuilder();
$subForm->add('subfield','text');
// Does not work
$form->add('subform', $subForm);
Run Code Online (Sandbox Code Playgroud)
不幸的是,此设置无法正常工作.我找不到任何方法如何将动态生成的子表单添加到动态生成的表单中,如上例所示.
我错过了什么函数调用?
上面的示例代码抛出的异常是
UnexpectedTypeException:给定的类型为"string或Symfony\Component\Form\FormTypeInterface","Symfony\Component\Form\Form"的预期参数.
php ×4
symfony ×4
apc ×1
clone ×1
csrf ×1
end-of-line ×1
forms ×1
git ×1
object ×1
opcode-cache ×1
symfony-2.1 ×1
templates ×1
twig ×1
validation ×1