小编Vil*_*ila的帖子

SourceTree App即使对于新克隆的存储库也说未提交的更改 - 可能是错的?

远程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)

git end-of-line atlassian-sourcetree

40
推荐指数
2
解决办法
4万
查看次数

APC操作码缓存是否在PHP-FPM池/工作者之间共享?

互联网有很多讨论,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操作码缓存是否真正在池和工作人员之间共享 - 更具体:它是否自动从所有工作人员中清除?

php opcode-cache apc

15
推荐指数
2
解决办法
1万
查看次数

如何在Symfony2中检查提供的CSRF令牌是否无效?

我创建了一个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)

模板 …

validation csrf symfony-forms symfony

11
推荐指数
2
解决办法
2万
查看次数

如何在Symfony2环境中注册另一个(自定义)Twig加载器?

我想在我的Symfony2应用程序中从数据库加载某些Twig模板,同时仍然保留使用本机加载器在标准文件系统位置呈现模板的可能性.怎么做到这一点?

据我所知,没有可能在Twig环境中注册多个加载器.我一直在想两种方式(现在):

  • 自定义代理类替换默认加载器.当使用标准@Bundle-notation引用模板时,代理会将请求传递给默认加载器.在其他情况下,请求将传递给我的自定义(数据库)加载器; 要么
  • 构建一个全新的Twig环境.此方法需要向两个环境注册自定义Twig扩展,并且不允许来自不同源的交叉引用模板(一些来自@Bundles,一些来自数据库)

更新1:

似乎Twig支持可以在我的第一个选项中使用的Twig_Loader_Chain类.仍然,默认加载器应该是可访问的并作为第一个选项传递给链.

templates symfony twig

6
推荐指数
1
解决办法
5815
查看次数

克隆原型对象是否比从头创建对象提供了性能改进?

您可以在下方看到两个简化的摘要,其结果不会发生变化.

模式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.;)

php clone object

6
推荐指数
1
解决办法
1509
查看次数

使用JMSI18nRoutingBundle时如何禁用所有bundle的所有路由的国际化?

我使用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的国际化?

php internationalization symfony

5
推荐指数
1
解决办法
1403
查看次数

将动态生成的表单嵌入到另一个表单中

我使用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 forms symfony-forms symfony symfony-2.1

3
推荐指数
2
解决办法
7556
查看次数