我想知道是否可以在symfony项目中使用基于json的无模式,基于文档的数据库,如Mongodb或Couchdb,就像它用于ruby-on-rails网站一样?如果是的话,怎么办呢?
我已经编写PHP多年了,并且已经在阳光下使用了每个框架,但是有一件事总是让我感到烦恼......那就是每当有人告诉我的服务器他们想要的时候,整个血腥的东西都必须被解释和执行页面服务.
我已经尝试过缓存,FastCGI,Zend作业队列(和类似的symfony插件 - 以及我自己的基于数据库的解决方案,实现System_Daemon类来运行后台进程)我已经设法让我的应用程序相当快速地使用所有这些东西......但是我无法克服我的设置文件,系统/环境检查功能以及所有应该只加载ONCE的所有东西的心理块...加载每个人的时间某人点击我的页面.
所以,我的漫步导致以下Q--
是否有一些方法/技术将PHP的某些方面加载到RAM中,以便在请求该页面时,所有我的settings.yml文件,系统检查,框架文件,缓存页面等都可以直接从内存加载而无需触及HD ...或者需要每天进行50,000次相同的加载机制来启动程序?
如果PHP中没有任何内容......是否有其他可以通过这种方式编译的"网络"语言,以允许真正的init-once应用程序?
我的背景是在Propel中,所以我希望在Doctrine_Record(sfDoctrineRecord)中覆盖一个神奇的getter是一件简单的事情,但是我得到了一个Segfault或者覆盖方法被简单地忽略了,而不是超类.
https://gist.github.com/697008eaf4d7b606286a
class FaqCategory extends BaseFaqCategory
{
public function __toString()
{
return $this->getCategory();
}
// doesn't work
// override getDisplayName to fall back to category name if getDisplayName doesn't exist
public function getDisplayName() {
// also tried parent::getDisplayName() but got segfault(!)
if(isset($this->display_name)) {
$display_name = $this->display_name;
} else {
$display_name = $this->category;
}
return $display_name;
}
}
Run Code Online (Sandbox Code Playgroud)
在Doctrine_Record实例上扩展/覆盖方法的正确Doctrine方法是什么(通过sfDoctrineRecord扩展Doctrine_Record)?这必须是可行的......或者我应该查看模板文档?
谢谢,Brian
我想知道是否有人在Symfony中设置动态元标题有任何好的建议/经验?
目前,我所知道的解决方案是使用以下代码在每个操作中单独设置标题:
$this->getResponse()->setTitle('This is a title');
Run Code Online (Sandbox Code Playgroud)
因为我还需要翻译标题,我可以在动作中调用i18n帮助程序,将它们包含在提取的XLIFF中.不需要特殊的SEO东西,只是一个干净的标题.
但是,上面的确需要我分别调整每一个动作.View.yml不合适,因为我经常每个模块有多个动作/模板.
是否有人知道Symfony有更好的方法,或者这确实是正确/唯一的方法吗?
谢谢.
放置在多个MVC层中使用的函数的最佳实践是什么?
我最近不得不编写一些在View和Model中使用的统计函数.如果我把它们放在帮助器中,我就会在模型层中加载助手,这很烦人,似乎不正确,并且当从任务调用这些函数时会完全中断(因为没有默认上下文).如果我将它们放在顶级lib目录中,我就会像Stats::normalPercentile在视图中那样进行调用.
还有其他选择吗?Symfony开发者是否有任何关于应该放置这些功能的评论?
编辑:显然在视图中进行静态调用没有问题.我推断这是基于Symfony没有将他们的助手编写为类(即使经过重要的讨论.)在这种情况下,是否有任何约定放置文件的约定?把它们扔进去lib/util?
如果我使用ORM,请与Zend或Symfony说.这是一个全有或全无的交易?
我想使用ORM,但也希望在某些情况下优化性能并自己编写查询以获得细节.因此,如果我开始使用ORM,一旦将其包含在我的项目中,是否难以以旧的方式进行操作?
我需要在symfony中为API返回疯狂的http代码状态
我需要返回状态码24我试着这样做:
$this->getResponse()->setStatusCode('24');
Run Code Online (Sandbox Code Playgroud)
但我总是得到响应代码500
当我尝试返回像404,403这样的"正常"状态代码时:
$this->getResponse()->setStatusCode('403');
Run Code Online (Sandbox Code Playgroud)
它没有问题
任何想法为什么?
在遵循"实践Symfony"课程的同时,我遇到了一个奇怪的错误.
我在VMWare 6.5.5机器上安装了Debian Squeeze.它附带PHP 5.3.3,我使用的是Symfony 1.4.源文件在主机上,我使用共享文件夹功能(vmhgfs mount)访问它们.
现在,当我尝试以下命令时,出现错误:
php symfony doctrine:build --model
php symfony doctrine:build --sql
Run Code Online (Sandbox Code Playgroud)
错误:
PHP Parse error: syntax error, unexpected ')' in /var/www/appli/lib/model/doctrine/base/BaseJobeetJob.class.php on line 144
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我: - 在没有共享文件夹的情况下做同样的事情(例如在ext3分区上),它可以工作, - 将VM转换为VirtualBox并在共享文件夹上执行相同的操作,它可以工作, - 降级PHP到5.2.6(来自lenny),它的工作原理.
我记得前一段时间与Smarty生成的PHP代码有同样的问题.因为它是自动生成的PHP并且可以随意重新生成,所以它是在本地direcorty中生成的.但我不认为这适用于Doctrine生成的文件.
有没有人知道发生了什么以及如何解决它?
编辑:这是第144行的代码:
public function setUp()
{
parent::setUp();
$this->hasOne('JobeetCategory', array(
'local' => 'category_id',
'foreign' => 'id',
'onDelete' => 'CASCADE'));
$timestampable0 = new Doctrine_Template_Timestampable();
$this->actAs($timestampable0);
}
} // Line 144 here.
Run Code Online (Sandbox Code Playgroud)
它实际上是文件的结尾......
编辑#2:说清楚我已经测试了以下组合以缩小问题范围:
我在Ubuntu 10.0.4 LTS上运行Symfony 1.3.6.
我编写了一个Symfony任务,生成一个包含链接(URL)的报告.
这是execute()我的任务类中方法的片段:
protected function execute($arguments = array(), $options = array())
{
//create a context
sfContext::createInstance($this->configuration);
sfContext::getInstance()->getConfiguration()->loadHelpers(array('Url', 'Asset', 'Tag'));
...
$url = url_for("@foobar?cow=marymoo&id=42");
// Line 1
echo '<a href="'.$url.'">This is a test</a>';
// Line 2
echo link_to('This is a test', $url);
}
Run Code Online (Sandbox Code Playgroud)
路由名称定义如下:
foobar:
url: /some/fancy/path/:cow/:id/hello.html
param: { module: mymodule, action: myaction }
Run Code Online (Sandbox Code Playgroud)
运行此命令时,生成的链接为:
第1行产生此输出:
./symfony/symfony/some/fancy/path/marymoo/42/hello.html
而不是预期的:
/some/fancy/path/marymoo/42/hello.html
第2行生成错误:
无法找到匹配的路由来为params生成url"array('action'=>'symfony','module'=>'.',)".
同样,预期的URL是:
/some/fancy/path/marymoo/42/hello.html
我怎么解决这个问题?
我正在使用Doctrine 1.2和Symfony 1.4.假设我有一个User模型,它有一个Profile.这些定义为:
用户:
轮廓:
我通常会得到这样的数据:
$query = Doctrine_Query::create()
->select('u.id, u.username, p.first_name, p.last_name')
->from('User u')
->leftJoin('Profile p')
->where('u.username = ?', $username);
$result = $query->fetchOne(array(), Doctrine_Core::HYDRATE_ARRAY);
print_r($result);
Run Code Online (Sandbox Code Playgroud)
这将输出如下内容:
Array (
"User" => Array (
"id" => 1,
"username" => "jschmoe"
),
"Profile" => Array (
"first_name" => "Joseph",
"last_name" => "Schmoe"
)
)
Run Code Online (Sandbox Code Playgroud)
但是,我希望用户能够包含"虚拟"列(不确定这是否是正确的术语),以便Profile中的字段实际上看起来像是User的一部分.换句话说,我希望看到的print_r声明看起来更像:
Array (
"User" => Array (
"id" => 1,
"username" => "jschmoe",
"first_name" …Run Code Online (Sandbox Code Playgroud)