我目前正在努力重写一个应用程序,以使用完全从Domain层抽象数据库的Data Mappers.但是,我现在想知道哪个是处理Domain对象之间关系的更好方法:
在我看来,为了保留'Fat Model,Skinny Controller'的口头禅,域对象必须知道数据映射器(无论是他们自己还是他们可以访问系统中的其他映射器) .此外,似乎选项2不必要地使数据访问层复杂化,因为它跨多个数据映射器创建表访问逻辑,而不是将其限制在单个数据映射器中.
那么,让域对象知道相关数据映射器并直接从域对象调用数据映射器函数是不正确的吗?
更新:这是我可以设想的唯一两个解决域对象之间关系问题的解决方案.任何显示更好方法的例子都是受欢迎的.
我正在编写一个小脚本,为设备生成一些配置.我想要单独的文件,我存储配置,并在将配置内容打印到浏览器期间更改一些字符串.如何用$ _POST ['somevariable']中的变量替换文件行中的字符串?
我有几种类型的设备.我希望为每种类型的设备提供具有配置模板的单独文件.如果有人想要更改某些类型设备的配置,他们将更改该文件而不是php文件.但是为了在php中使用这个模板,我必须在打印到网页之前替换该文件中的一些字符串,例如:sys info hostname%host_name%sys info location%location%ip set%ip%%between之间的字符串(%可以是任何其他的)字符应该用$ _POST ["host_name"],$ _POST ["location"],$ _POST ["ip"]等替换.所有这些参数都来自发布的表格.
我正在使用PHPUnderControl(PHP的Cruise Control插件)作为PHP开发的CI服务器.我使用Ant来构建我的项目.PHPUC的主要用途是
Hudson与PHPUC的优点是什么?我听说它的开发速度越来越快,日益广泛使用.
这是它的定义:
使用共享可以有效地支持大量细粒度对象.
但我无法弄清楚它究竟意味着什么.
你能用一个小小的演示来详细说明吗?
我在我的网站上有文章,我想添加描述每篇文章的标签,但是我遇到了设计mysql表标签的问题.我有两个想法:
因此,当我想要ID为1的文章的标签时,我会跑
SELECT ... FROM tags WHERE `article_id`=1;
Run Code Online (Sandbox Code Playgroud)
但是,我也想通过比较标签来了解3篇最相似的文章,所以如果我的文章有标签"php,mysql,erlang",还有5篇带有标签的文章:"php,mysql","erlang,ruby", "php erlang","mysql,erlang,javascript",我会选择1.,3.和4.,因为这3个标签与主文章大致相同.
还有一个问题,获得10个"最常用标签"的最佳方法是什么?
我看到一些代码执行此操作:
if(something){
echo 'exit from program';
die;
}
...more code
Run Code Online (Sandbox Code Playgroud)
和其他人一样die:
if(something) die('exit from program');
...more code
Run Code Online (Sandbox Code Playgroud)
它何时结束程序有什么固有的区别,我应该知道它之后的代码吗?诸如此类
UPDATE
我主要是问,如果它是一种编码风格,或者是否有一个真正的原因,为什么有些编码方式与另一种方式编码.我不是在问exit和之间有什么区别die.
任何人都可以帮助将XML文档中的数据转换为关联数组吗?我遇到了问题,因为XML结构是一种3D结构,并且数组更像是2D结构(请原谅我缺乏正确的术语).XML元素有属性,子元素和子元素(但我从来不知道它们的名字),所以我想我会尝试使数组中的键成为每个子/属性名称的串联,并且值等于,嗯,价值.麻烦的是我需要将属性名称和值作为连接数组键的一部分,以使其唯一...
例如:
<Computer id="1">
<OS>
<Name>Linux</Name>
<Age>Older than me</Age>
</OS>
</Computer>
<Computer id="2">
<OS>
<Name>Windows</Name>
<Age>Not so much</Age>
</OS>
</Computer>
Run Code Online (Sandbox Code Playgroud)
理想情况下应该给:
[Computer-id-1-OS-Name] = 'Linux'
[Computer-id-1-OS-Age] = 'Older than me'
[Computer-id-2-OS-Name] = 'Windows'
[Computer-id-2-OS-Age] = 'Not so much'
Run Code Online (Sandbox Code Playgroud)
但我得到了这个结果:
[Computer-id] = '1'
[Computer-OS-Name] = 'Linux'
[Computer-OS-Age] = 'Older than me'
[Computer-id] = '2'
[Computer-OS-Name] = 'Windows'
[Computer-OS-Age] = 'Not so much'
Run Code Online (Sandbox Code Playgroud)
这样[Computer-id]键不是唯一的.我正在使用递归函数来读取值,但我无法弄清楚如何将属性名称和属性值转换为从属键的名称...(顺便说一句,有一个很好的理由这样做看似不合逻辑的任务!)任何帮助将不胜感激......
这是在将XML数据读入多维数组后"展平"XML函数的函数.我不确定我会以正确的方式做到这一点!
function flattenArray ($array, $baseName = NULL)
{
reset($array);
while (list ($key, $value) = each($array)) {
$outKey = $key …Run Code Online (Sandbox Code Playgroud) 我想使用DOM Document获取整个body标签内容.
我使用以下代码:
$dom = new domDocument;
/*** load the html into the object ***/
$dom->loadHTML($html);
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('body')->item(0)->nodeValue;
Run Code Online (Sandbox Code Playgroud)
这给了我TExt.我想要全身内容.
这个问题与Symfony 2没有严格的关系,但是当我使用Symfony 2组件并且稍后可能使用Symfony\Component\DependencyInjection\Container作为DI-Container时,它可能是相关的.
我目前正在使用Symfony 2中的组件构建一个小型库,例如HttpFoundation,Validator,Yaml.我的域服务都扩展了一个基本的AbstractService,只提供了Doctrine\ORM\EntityManager和Symfony\Component\Validator\Validator,它们通过构造函数注入,如下所示:
abstract class AbstractService
{
protected $em;
protected $validator;
/**
* @param Doctrine\ORM\EntityManager $em
* @param Symfony\Component\Validator\Validator $validator
*/
public function __construct(EntityManager $em, Validator $validator)
{
$this->em = $em;
$this->validator = $validator;
}
}
Run Code Online (Sandbox Code Playgroud)
扩展此AbstractService的Service类现在可能需要注入其他组件,例如Symfony\Component\HttpFoundation\Session.从我这样做:
class MyService extends AbstractService
{
/**
* @var Symfony\Component\HttpFoundation\Session
*/
protected $session;
/**
* @param Symfony\Component\HttpFoundation\Session $session
* @param Doctrine\ORM\EntityManager $em
* @param Symfony\Component\Validator\Validator $validator
*/
public function __construct(Session $session, EntityManager $em, Validator $validator)
{
parent::__construct($em, $validator);
$this->session = $session;
} …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中嵌入了python解释器.我用它来运行使用PyRun_String()API的python脚本.PyErr_Fetch()如果遇到错误/异常,我可以使用获取错误信息.这给了我异常类型,异常值和异常回溯.然后我从traceback中找到原始错误的行号.但是,在语法错误的情况下,我不会得到任何类型的回溯.有人知道如何检索行号而无需追溯..?有没有办法使用异常类型或异常值来检索它.?
Python文档声明:
此类的实例具有filename,lineno,offset和text属性,以便于访问详细信息.异常实例的str()仅返回消息.
如何在嵌入式python中检索SyntaxError的filename和lineno属性?
任何帮助将不胜感激.提前致谢.
谢谢你的建议Brett.但我已经通过使用PyObject_GetAttr()尝试了它.
请参阅下面用于测试目的的示例代码.
int main(int argc, char** argv)
{
Py_Initialize();
// Get a reference to the main module.
PyObject* main_module =
PyImport_AddModule("__main__");
// Get the main module's dictionary
// and make a copy of it.
PyObject* main_dict =
PyModule_GetDict(main_module);
const char *script_source = "def main():\n\tprint('Hello'\n\nmain()";
PyObject *res = PyRun_String(script_source,Py_file_input,main_dict,main_dict);
if(res == NULL)
{
PyObject *ptype = NULL, *pvalue = NULL, *ptraceback = NULL;
PyErr_Fetch(&ptype,&pvalue,&ptraceback);
PyObject* py_filename = PyUnicode_FromString("filename");
PyObject* file_name = PyObject_GetAttr(ptype,py_filename); …Run Code Online (Sandbox Code Playgroud)