我正在使用PHP的MVC应用程序,它没有使用任何框架.我正在使用RedBean来实现我的ORM,它实现了数据映射器模式,并且与doctrine类似.
根据这个问题,我理解该模型不是ORM对象.在我的项目中,我有以下场景:
需要与数据库中的许多表进行通信的"复杂"模型:
$permission->isAllowed($controller, $action, $resource)来确定是否允许用户执行所请求的操作.此外,他可能会调用$permission->getPermissions()以获取用户拥有的权限列表."简单"模型,其中模型通常可以由数据库中的1个表表示:
User模型.例如$user->changeRank(),$user->addPoints()依此类推.我现在面临的问题是查看各种框架的大多数文档,我可以看到在示例中,控制器直接与ORM进行通信.例如,这是symfony2的示例控制器:
public function createAction()
{
$product = new Product();
$product->setName('A Foo Bar');
$product->setPrice('19.99');
$product->setDescription('Lorem ipsum dolor');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
return new Response('Created product id '.$product->getId());
}
Run Code Online (Sandbox Code Playgroud)
如果ORM不是模型,为什么允许控制器直接与它交互?它不应该与看起来像这样的模型相互作用吗?
class ProductModel{
public function newProduct($name, $price, $description){
$product = new Product();
$product->setName('A Foo Bar');
$product->setPrice('19.99');
$product->setDescription('Lorem ipsum dolor');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编译imagemagick(imagick)扩展,以便在Windows上的非线程安全环境中使用.
我使用的是PHP 5.3.10,并将Visual C++ express设置为我的编译环境.问题是我在Apache 2.2中使用非线程安全的PHP版本作为FCGI模块.
因此,我的PHP提供了一个php5.lib而不是一个php5ts.lib.我相信这就是我收到这些错误的原因:
imagick.obj : error LNK2019: unresolved external symbol __imp__tsrm_mutex_alloc referenced in function _zm_startup_imagick
Run Code Online (Sandbox Code Playgroud)
我只在linux上构建和编译过东西,所以我不太确定如何在windows环境下执行此操作.
如何编译扩展以使其不是线程安全的?
我下载了PHP 5.3.10的threadsafe二进制文件来获取php5ts.lib的副本.然后我就可以编译扩展了.
我猜测将ZTS预处理程序指令设置为1或者0将导致扩展编译为线程安全或非线程安全.(对此不太确定,所以如果有人能告诉我这是否正确,那将非常感激.:))
然后我设置了一个运行Windows 7的虚拟机并安装了最新版本的WAMP.原因是它使用了PHP的线程安全版本.
我将dll放在PHP安装的ext文件夹中并启用它php.ini.但是,即使在WAMP中尝试了ts和nts版本之后,我也会得到:
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.3.10/ext/imagick.dll' - The specified module could not be found.
in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)
但问题c:/wamp/bin/php/php5.3.10/ext/imagick.dll'确实存在,是的,我已经检查了很多次.
然后我将ImageMagick降级到6.6.2-10-Q16,但仍然看到同样的问题.
在Apache 2.2上运行nts版本的PHP 5.3.10的dev机器上也会出现同样的问题(全部手动安装).
看起来我对ZTS预处理器可能是错的.如果我设置ZTS=0和编译,在编译的dll上使用依赖walker仍然表明它需要php5ts.dll哪个只存在于线程安全的PHP版本上.
我做了更多修补依赖性walker,发现我必须统计链接到msvc100d.dll.然后我ZTS在预处理器定义中删除了并且能够使用php5.lib …
我在Windows 8.1 64位上使用go 1.5.1.我没有GO15VENDOREXPERIMENT在我的环境中设置.我安装了最新版本的git和bazaar.
我想要获得gomniauth包裹:
go get github.com/stretchr/gomniauth
Run Code Online (Sandbox Code Playgroud)
即使该过程完成没有任何错误,也不会引入很多依赖项.
例如,在编译我的应用程序(取决于gomniauth)时,我收到以下错误:
..\github.com\stretchr\codecs\xml\simple_xml_codec.go:5:2: cannot find package "github.com/clbanning/x2j" in any of:
C:\Go\src\github.com\clbanning\x2j (from $GOROOT)
C:\work\src\github.com\clbanning\x2j (from $GOPATH)
..\github.com\stretchr\codecs\msgpack\msgpack_codec.go:6:2: cannot find package "github.com/ugorji/go/codec" in any of:
C:\Go\src\github.com\ugorji\go\codec (from $GOROOT)
C:\work\src\github.com\ugorji\go\codec (from $GOPATH)
..\github.com\stretchr\codecs\bson\bson_codec.go:5:2: cannot find package "labix.org/v2/mgo/bson" in any of:
C:\Go\src\labix.org\v2\mgo\bson (from $GOROOT)
C:\work\src\labix.org\v2\mgo\bson (from $GOPATH)
Run Code Online (Sandbox Code Playgroud)
它似乎引入了直接依赖关系gomniauth,但没有引入依赖关系的依赖关系.我已经和删除stretchr从我的文件夹GOPATH/src以及GOPATH/pkg,但运行后go get很多次,但还是没有超过第二级别的任何依赖拉动.
我100%确信我的网络问题没有问题.我可以使用我的浏览器或卷曲访问那些github repos.
我正在构建一个需要国际化的php web应用程序.我决定将get-text用于系统相关的字符串,也许还有一些数据库表用于用户生成的内容.
例如,用户可能能够发布博客帖子.他应该能够以不同的语言发布该帖子的不同版本.我可以通过在posts表中存储所有帖子以及表示语言的额外列来实现这一点.
困难的一点是试图国际化存储在数据库中的系统字符串.
例如,我有一个存储权限的表.每个权限都应该有一个描述此权限的字符串.
目前,它存储在这样的表中:
我计划使用像PoEdit这样的应用程序来生成gettext文件.它能够搜索所有的php文件以获取字符串.但是在这样的情况下,字符串存储在数据库中,提取字符串进行转换可能是一项相当大的工作.处理这个的一些技巧和解决方案是什么?
最后,假设我有一些用户可以在应用程序中创建和定义的数据类型和表单.例如,为购物车定义"产品类型".这意味着该产品将拥有自己独特的属性和描述集.这些属性需要与描述一起进行翻译.
形式相同的情况.用户可以创建可以存储在一组表中的表单.然后需要翻译这些表格.
我可以使用哪些数据库模型来存储表单和产品类型的翻译?
干杯:)
通常,当我在github上发送Pull Requests时,我会创建一个分支,进行我的更改,然后让他们将该分支合并到他们的repo中.
一旦完成,在Github上,我删除分支(但github只是隐藏它).然后我永久删除Github网站上的分支.
既然远程分支已经消失,我如何将本地仓库与远程分支同步?我尝试过抓取和拉动,但这并没有删除我本地仓库中的分支.
我是否必须从我的仓库手动删除它们,还是有某种方法来同步它?
我有活动存储在图形数据库中.在某些情况下,多个活动被分组并聚合为1个活动.
已处理的活动Feed可能如下所示:
Activity 1
Activity 2
Grouped Activity
Activity 3
Activity 4
Activity 5
Run Code Online (Sandbox Code Playgroud)
活动具有更新的时间戳和唯一ID.
活动按其更新时间排序,如果是分组活动,则使用其子活动中的最新更新时间.
活动可以插入列表中的任何位置(例如,如果我们开始关注某人,他们过去的活动将被插入到列表中).
可以从列表中的任何位置删除活动.
由于数据量大,使用带有微秒的时间戳仍然可能导致冲突(2个项目可以具有相同的时间戳).
游标标识符应该是唯一且稳定的.添加和删除Feed项不应更改标识符.
我想介绍基于光标的分页,以允许客户端通过类似于twitter的 Feed分页.似乎没有太多关于它们是如何构建的信息,因为我只发现这篇博文在谈论实现它们.但是,如果光标的标识符恰好指向已删除的项目,则似乎存在问题.
有了上述内容,我如何生成一个可用作上述光标的标识符?最初,我考虑将时间戳与唯一ID组合:1371813798111111.myuniqueid.但是,如果1371813798111111.myuniqueid删除了项目,我可以获取带有1371813798111111时间戳的项目,但无法确定哪个项目应该以我应该开始的时间戳.
我的另一种方法是为每个Feed结果分配一个递增的数字.由于数字是递增的并且按顺序,如果缺少数字/ id,我可以选择下一个.但是,这样做的问题是,如果我开始在Feed中间删除并添加Feed项,则游标ID会发生变化.我遇到这个问题的一个解决方案是每个数字之间存在巨大差距,但很难确定如何以确定的方式将新项目添加到每个数字之间的空间.此外,随着新项目的增加,以及填补的空白,我们最终会遇到同样的问题.
简单地说,如果我有一个项目列表,可以在列表中的任何位置添加和删除项目,那么为每个列表项生成id的最佳方法是,如果删除了id的项目,我仍然可以确定它在列表中的位置?
有时,我的应用程序中出现以下死锁错误:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
Run Code Online (Sandbox Code Playgroud)
有问题的表格如下:
CREATE TABLE `oauth_access_token` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`access_token` text COLLATE utf8_unicode_ci NOT NULL,
`oauth_client_id` int(10) unsigned NOT NULL,
`instance_id` int(10) unsigned DEFAULT NULL,
`expires` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_oauth_access_token_instance_idx` (`instance_id`),
KEY `FK_oauth_access_token_oauth_client_idx` (`oauth_client_id`),
CONSTRAINT `FK_oauth_access_token_instance` FOREIGN KEY (`instance_id`) REFERENCES `instance` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `FK_oauth_access_token_oauth_client` FOREIGN KEY (`oauth_client_id`) REFERENCES `oauth_client` (`id`) ON …Run Code Online (Sandbox Code Playgroud) 我们正在创建一个构建过程来缩小和连接我们所有的文件.
不幸的是,CKEditor的负载config.js和styles.js本身.我想将所有这些文件连接在一起,以便只有1个http请求.
作为测试,我尝试使用下载中的文件创建一个包含ckeditor.js并config.js组合在一起的文件basic.
不幸的是,似乎ckeditor仍然会继续尝试加载config.js.
但是,如果我使用ckeditor.jsckeditor托管,似乎只有1个请求:http://jsfiddle.net/jdPn3/
在上述情况下,config.js和styles.js不出现被加载.
他们是如何进行连接的?
enableBasicAutocompletionAce编辑器的选项有什么作用?我试着将它设置为true和false,但无法观察到任何区别.
enableLiveAutocompletion 在启用时会为我显示建议的下拉列表.
这就是我设置选项的方式:
ace.js并且ext-language_tools.js已加载.
然后:
ace.require("ace/ext/language_tools");
var editor = ace.edit('someid');
editor.setOptions({
maxLines: Infinity,
minLines: 7,
enableBasicAutocompletion: true,
enableLiveAutocompletion: true
});
editor.setTheme("ace/theme/tomorrow");
editor.getSession().setMode("ace/mode/javascript");
Run Code Online (Sandbox Code Playgroud) 我需要一个通用函数来检查某项是否等于其零值。
通过这个问题,我能够找到一个适用于值类型的函数。我修改了它以支持指针:
func isZeroOfUnderlyingType(x interface{}) bool {
rawType := reflect.TypeOf(x)
//source is a pointer, convert to its value
if rawType.Kind() == reflect.Ptr {
rawType = rawType.Elem()
}
return reflect.DeepEqual(x, reflect.Zero(rawType).Interface())
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当执行以下操作时,这对我不起作用:
type myStruct struct{}
isZeroOfUnderlyingType(myStruct{}) //Returns true (works)
isZeroOfUnderlyingType(&myStruct{}) //Returns false (doesn't) work
Run Code Online (Sandbox Code Playgroud)
这是因为&myStruct{}是指针,并且无法取消引用interface{}函数内部的方式。如何将指针的值与其类型的零值进行比较?
php ×3
go ×2
ace-editor ×1
branch ×1
ckeditor ×1
compilation ×1
cursor ×1
deadlock ×1
gettext ×1
git ×1
github ×1
model ×1
mysql ×1
orm ×1
pagination ×1
reflection ×1
windows ×1