尝试在 ZF2 上弄湿我的脚,我偶然发现了我的第一个问题。在一个模块上说我想使用 Shanty_Mongo(一个连接到 MongoDb 的外部库)
所以我复制了库中的整个 Shanty 目录并创建了一个新的模型类:
namespace Dummy\Model;
use Shanty\Mongo\Document;
class Dummy extends Shanty_Mongo_Document {
public function setConnections( $connections ) {
Shanty_Mongo::addConnections($connections);
}
}
(setConnections() 将由 DI 使用,如果我理解得很好的话)
这个好像找不到Shanty_Mongo_Document。我应该向 application.config.php 添加一些内容以指向额外的库吗?
最佳答案
Shanty_Mongo 库是一个“旧的”下划线分隔库,不使用命名空间。在 ZF2 中,样式与 PSR-0 标准相同,但带有命名空间(因此 Shanty_Mongo 将是 Shanty\Mongo)。但是,例如,您可以使用类映射很好地加载这些旧样式。然后您可以在 ZF2 项目中使用下划线分隔的类。
我建议您为这个库创建一个模块并将该模块放在 ./vendor 下(用于“提供第 3 方功能的模块”)。在这个模块中,你可以创建如下目录结构(我假设模块的名字是ShantyMongo):
./vendor/ShantyMongo/
library/
Module.php
autoload_classmap.php
autoload_function.php
autoload_register.php
该库是 Shanty-Mongo git 存储库的子模块。文件 autoload_classmap.php 是由 ZF2 存储库的 bin 目录中的 php 脚本 classmap_generator.php 创建的类映射。然后 autoload_function.php 可以像这样简单:
<?php
return function ($class) {
static $map;
if (!$map) {
$map = include __DIR__ . '/autoload_classmap.php';
}
if (!isset($map[$class])) {
return false;
}
return include $map[$class];
};
autoload_register.php 是这样的:
<?php
spl_autoload_register(include __DIR__ . '/autoload_function.php');
要让 ZF2 应用程序知道您拥有此模块,您需要使用 ShantyMongo\Module 类填充 module.php。这样的东西应该足够了:
<?php
namespace ShantyMongo;
use Zend\Module\Consumer\AutoloaderProvider;
class Module implements AutoloaderProvider
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
)
);
}
}
如果您将“ShantyMongo”添加到 application.config.php 中的模块数组,您现在已经为 ZF2 中的这个第 3 方库设置了自动加载器。然后,您可以按如下方式使用您的模型:
<?php
namespace Dummy\Model;
class Dummy extends Shanty_Mongo_Document {
public function setConnections ($connections) {
Shanty_Mongo::addConnections($connections);
}
}
因为 ShantyMongo 不使用 namespace ,所以您不再有那个 use 语句。
关于php - Zend Framework 2 库路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8026375/
如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b
我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa
Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i
我安装了ruby、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom
是否有内置的Ruby方法或众所周知的库可以返回对象的整个方法查找链?Ruby查看一系列令人困惑的类(如thisquestion中所讨论)以查找与消息对应的实例方法,如果没有类响应消息,则调用接收方的method_missing。我将以下代码放在一起,但我确信它遗漏了某些情况或者它是否100%正确。请指出任何缺陷并指导我找到一些更好的代码(如果存在)。defmethod_lookup_chain(obj,result=[obj.singleton_class])ifobj.instance_of?Classreturnadd_modules(result)ifresult.last==B
我正在寻找这样解析路由路径的方法:ActionController::Routing.new("post_path").parse#=>{:controller=>"posts",:action=>"index"}应该和url_for相反更新我发现:Whatistheoppositeofurl_forinRails?Afunctionthattakesapathandgeneratestheinterpretedroute?ActionController::Routing::Routes.recognize_path("/posts")所以现在我需要将posts_path转换为“/p
一:os.path.dirname(__file__)和os.getcwd()importospath=os.path.dirname(__file__)print("os.path.dirname(__file__)方法的结果{}".format(path))path=os.getcwd()print("os.getcwd()方法的结果{}".format(path))该脚本路径为:/User/xxx/Work1.在当前目录/User/xxx/Work运行程序结果:2.在上一级目录/User/xxx运行程序:3.在其他目录/User/xxx/Work/python运行程序:\在其他目录/Us
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
Paperclip的文档提到,您可以通过将以下代码放在test.rb环境文件中来更改测试的上传路径:Paperclip::Attachment.default_options[:path]="#{Rails.root}/spec/test_files/:class/:id_partition/:style.:extension"我遇到的问题是附件在模型中设置了路径,不会被覆盖:has_attached_file:photo,path:':attachment/:id/:style.:extension'当我运行测试时,文件会上传到/photo/文件夹而不是/spec/test_file
长话短说我想更改Rails资源路由的默认行为,移动所有资源的create路径,使其成为/resources/new的POST而不是比/resources。设置让我们假设一个像这样指定的足智多谋的路线:#routes.rbresources:events实际生成的路由是:$rakeroutesPrefixVerbURIPatternController#ActioneventsGET/events(.:format)events#indexPOST/events(.:format)events#createnew_eventGET/events/new(.:format)events#n