PHP的Reflection层次结构中的每个对象都有一个静态导出方法.您可以使用它来获取类的字符串表示形式.代码是这样的
$c = new ReflectionClass('Mage_Core_Model_Abstract');
ReflectionClass::export($c)
Run Code Online (Sandbox Code Playgroud)
将回应以下回复
Class [ <internal:Reflection> class ReflectionClass implements Reflector ] {
- Constants [3] {
Constant [ integer IS_IMPLICIT_ABSTRACT ] { 16 }
Constant [ integer IS_EXPLICIT_ABSTRACT ] { 32 }
Constant [ integer IS_FINAL ] { 64 }
}
- Static properties [0] {
}
- Static methods [1] {
Method [ <internal:Reflection> static public method export ] {
- Parameters [2] {
Parameter #0 [ <required> $argument ]
Parameter #1 [ <optional> $return …Run Code Online (Sandbox Code Playgroud) 我正在与Magento做一些定制工作,Magento有一个基于EAV模型的数据库设计,我需要一些很好的资源/教程来解释EAV数据库模型.请不要将维基百科作为资源提供......我正在寻找能够以初学者友好的方式教授EAV的东西.
使用Magento电子商务系统,是否可以从管理面板导航菜单中删除项目?更一般地说,有没有办法使用配置覆盖系统从配置中删除现有元素?
我知道我可以使用类似于此的覆盖添加到导航中
<?xml version="1.0"?>
<config>
<modules>
<Company_Module>
<version>
0.1.0
</version>
</Company_Module>
</modules>
<adminhtml>
<menu>
<cms translate="title" module="cms">
<title>The CMS</title>
<sort_order>70</sort_order>
<children>
<foo translate="title" module="cms">
<title>Foo Item</title>
<action>adminhtml/foo</action>
</foo>
</children>
</cms>
</menu>
</adminhtml>
</config>
Run Code Online (Sandbox Code Playgroud)
但是我怎么能/完全压制CMS导航项呢?
有没有办法将自定义表单元素添加到Magento Adminhtml表单而不将自定义元素放在lib/Varian文件夹中?
我已经找到了基本上是Varian_Data_Form_Element_工厂的代码
public function addField($elementId, $type, $config, $after=false)
{
if (isset($this->_types[$type])) {
$className = $this->_types[$type];
}
else {
$className = 'Varien_Data_Form_Element_'.ucfirst(strtolower($type));
}
$element = new $className($config);
$element->setId($elementId);
if ($element->getRequired()) {
$element->addClass('required-entry');
}
$this->addElement($element, $after);
return $element;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我正确读取此内容,我确保EAV属性的前端返回特定的fieldType(例如supertextfield),系统将Varien_Data_Form_Element_Supertextfield在显示此属性的编辑表单时实例化/呈现 .
这很好,但这意味着我需要在lib/Varian文件夹层次结构中包含我的自定义表单元素.鉴于Magento是面向模块的,看起来这样做是错误的.
我意识到我可以在lib中使用custo自动加载器或符号链接,但我主要是想学习是否有
为属性添加自定义表单元素的规范方法
一种定制Magento自动加载器的规范方法.
我正在处理一个系统,其中在页面的早期正在执行以下Javascript代码(这是我无法控制的)
if (!("console" in window) || !("firebug" in console))
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
}
Run Code Online (Sandbox Code Playgroud)
此代码似乎用于创建模拟console对象,以防止在没有JavaScript控制台的环境中出现javascript错误.这很棒,但它也阻止了谷歌Chrome控制台的运行.条件firebug明确地检查,但就是这样
if (!("console" in window) || !("firebug" in console))
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法告诉Chrome的调试器重新初始化其控制台对象?也就是说,用简单的英语告诉Chrome
嘿,你知道当你加载一个页面并定义一个控制台对象供我使用吗?再次这样做,以便我们可以覆盖用户空间中的某个人所做的事情.
我意识到我可以做类似的事情
console.firebug = "faketrue";
Run Code Online (Sandbox Code Playgroud)
并且条件被捕获,但我在系统中受到限制,并且在上述控制台重新定义命中之前没有办法添加javascript.换句话说,不,我不能只是在头部开始后添加一些javascript代码.
作曲家是否提供了更新项目创建包的方法?即,如果我用以下内容创建一个新的laravel项目
composer create-project --prefer-dist laravel/laravel blog
Run Code Online (Sandbox Code Playgroud)
Composer将获取最新版本的laravel/laravel软件包,将其解压缩到博客文件夹中,然后composer install从该blog文件夹运行.
我想要/需要知道的是,作曲家是否为我提供了一种更新laravel/laravel下载到该blog文件夹的包的方法?我知道我可以自己composer update在blog文件夹内运行,但这只会更新在属性中列出compser.json的内容require- 它不会更新未归档laravel/laravel的内容blog(或者它会吗?)
我跑的时候
$ composer.phar install
Run Code Online (Sandbox Code Playgroud)
安装的软件包来自哪里?
我知道Packagist是PHP包的默认存储库,并且缺少不同的包composer.json,这就是composer将寻找包的地方.
但是,我不清楚的是Composer和Packagist是如何交互的.
Composer是否直接从中下载文件 packagist.org
或者,Composer是否packagist从存储库直接获取git/svn/hg存储库链接并从存储库下载文件?
或者是其他东西?
如果有的话,Symfony 2捆绑开发人员应该如何使用库存Symfony 2系统附带的事件调度程序?
我一直在寻找Symfony事件调度员的来源,而我所看到的一些内容让我有点困惑,我是第三方捆绑创建者应该如何使用Symfony附带的事件调度程序.
具体来说,我注意到一个股票Symfony系统有两个事件调度程序服务.的event_dispatcher和debug.event_dispatcher.HttpKernel使用哪种服务依赖于环境,并由生成的dev或prod容器文件驱动.
//dev kernel instantiation uses `debug.event_dispatcher` service
new \Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel(
$this->get('debug.event_dispatcher'),
$this,
$this->get('debug.controller_resolver')
);
//prod kernel instantiation uses `event_dispatcher` service
new \Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel(
$this->get('event_dispatcher'),
$this,
new \Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver($this, $this->get('controller_name_converter'), $this->get('monolog.logger.request', ContainerInterface::NULL_ON_INVALID_REFERENCE)));
Run Code Online (Sandbox Code Playgroud)
到目前为止,这一切都有意义 - 因为它是debug.event_dispatcher在Web配置文件的事件选项卡中实现功能,包括能够查看调用哪些侦听器以及未调用哪些侦听器.
但是,我注意到大多数(如果不是全部)第三方捆绑包使用硬编码event_dispatcher服务调用.例如,JMS/JobQueueBundle使用以下内容
$this->dispatcher = $this->getContainer()->get('event_dispatcher');
Run Code Online (Sandbox Code Playgroud)
活动派出这样火正确,但在debug.event_dispatcher不知道它们,这意味着Symfony的网络分析器会错误地列出一个叫听者没有道理.此外,目前尚不清楚捆绑作者如何避免这种情况,因为他们没有生成容器文件的优势,并且 HTTP内核对象不会公开受保护调度程序对象的访问者.
那么,这是Symfony中的一个错误吗?
或者该event_dispatcher服务仅用于内核事件,这意味着所有这些捆绑作者都在滥用它?
或者(最有可能的候选人),是否是我缺少或未考虑的其他内容?
我遇到的情况是,我认为每55分钟运行一次的cron工作实际上是在一小时后的55分钟和最高时间运行.实际上,它不是一个cron工作,但它是一个使用cron语法的PHP调度应用程序.
当我要求此应用程序每隔55分钟安排一个作业时,它会创建一个如下所示的crontab行.
*/55 * * * *
Run Code Online (Sandbox Code Playgroud)
这个crontab行最终没有每55分钟运行一次作业.相反,工作在工作时间后的55分钟和最高时间运行.我不希望这样.我通过cron测试器运行它,它验证了不良行为是正确的cron行为.
这让我想起了/实际意味着什么.当我查看cron手册时,我学会了斜线表示"步骤",但手册本身有点模糊,这意味着
步长值可与范围结合使用.在带有"
<number>" 的范围之后,指定在该范围内跳过数字的值.例如,0-23/2可以在小时字段中使用" "来指定每隔一小时执行一次命令(V7标准中的替代方法是"0,2,4,6,8,10,12,14,16,18,20,22").星号后也允许步骤,所以如果你想说"每两个小时",只需使用"*/2".
手册的描述("指定通过范围跳过数字的值")有点模糊,"每两个小时"的例子有点误导(这可能导致应用程序中的错误)
那么,有两个问题:
unix cron程序如何使用"步骤"信息(斜杠后的数字)来决定是否应该跳过运行作业?(模块化划分?如果是这样,关于什么?决定"真正"运行的条件是什么,哪些决策不是?或者是其他什么?)
是否可以将unix cron作业配置为每隔"N"分钟运行一次?
我在探讨PHP的构建机制,并在将数组作为对象进行投射时遇到了一个奇怪的情况
$o = (object) array('1'=>'/foo/bar');
$o = new stdClass();
var_dump($o);
Run Code Online (Sandbox Code Playgroud)
据我了解,PHP属性需要使用与PHP变量相同的规则声明.这是一个有效的变量名称,以字母或下划线开头,后跟任意数量的字母,数字或下划线.但是,上面的代码产生以下输出
object(stdClass)#1 (1) {
[1]=>
string(8) "/foo/bar"
}
Run Code Online (Sandbox Code Playgroud)
当你试图访问对象中的信息时,它变得非常奇怪.
var_dump($o->1); // parse error
var_dump($o->{'1'}); // NULL
var_dump(get_object_vars($o)); //array(0) { }
Run Code Online (Sandbox Code Playgroud)
无论如何都要获取var_dump报告的信息在对象中,或者它是否仅在请求生命周期的其余部分被锁定?(实际使用这是零,我只是好奇)
php ×7
magento ×4
composer-php ×2
arrays ×1
autoload ×1
casting ×1
cron ×1
database ×1
events ×1
forms ×1
javascript ×1
laravel ×1
navigation ×1
overriding ×1
reflection ×1
symfony ×1
unix ×1
xml ×1