小编Ala*_*orm的帖子

PHP中导出的反射类的格式?

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)

php reflection magento

15
推荐指数
1
解决办法
1061
查看次数

了解EAV数据库模型的最佳初学者资源?

我正在与Magento做一些定制工作,Magento有一个基于EAV模型的数据库设计,我需要一些很好的资源/教程来解释EAV数据库模型.请不要将维基百科作为资源提供......我正在寻找能够以初学者友好的方式教授EAV的东西.

database database-design magento entity-attribute-value

14
推荐指数
3
解决办法
2万
查看次数

从Magento的管理面板导航中删除项目

使用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导航项呢?

php xml navigation overriding magento

14
推荐指数
2
解决办法
1万
查看次数

将自定义表单元素添加到Adminhtml表单

有没有办法将自定义表单元素添加到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自动加载器或符号链接,但我主要是想学习是否有

  1. 为属性添加自定义表单元素的规范方法

  2. 一种定制Magento自动加载器的规范方法.

php forms magento autoload

14
推荐指数
2
解决办法
2万
查看次数

"取消重新定义"Google Chrome的控制台对象

我正在处理一个系统,其中在页面的早期正在执行以下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代码.

javascript google-chrome google-chrome-devtools

14
推荐指数
1
解决办法
1196
查看次数

Composer:更新使用`create-project`创建的项目

作曲家是否提供了更新项目创建包的方法?即,如果我用以下内容创建一个新的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 updateblog文件夹内运行,但这只会更新在属性中列出compser.json的内容require- 它不会更新未归档laravel/laravel的内容blog(或者它会吗?)

php laravel composer-php

14
推荐指数
1
解决办法
2054
查看次数

PHP Composer软件包来自哪里?

我跑的时候

$ composer.phar install
Run Code Online (Sandbox Code Playgroud)

安装的软件包来自哪里?

我知道Packagist是PHP包的默认存储库,并且缺少不同的包composer.json,这就是composer将寻找包的地方.

但是,我不清楚的是Composer和Packagist是如何交互的.

  • Composer是否直接从中下载文件 packagist.org

  • 或者,Composer是否packagist从存储库直接获取git/svn/hg存储库链接并从存储库下载文件?

  • 或者是其他东西?

php composer-php

13
推荐指数
1
解决办法
2417
查看次数

使用Symfony 2事件调度程序

如果有的话,Symfony 2捆绑开发人员应该如何使用库存Symfony 2系统附带的事件调度程序?

我一直在寻找Symfony事件调度员的来源,而我所看到的一些内容让我有点困惑,我是第三方捆绑创建者应该如何使用Symfony附带的事件调度程序.

具体来说,我注意到一个股票Symfony系统有两个事件调度程序服务.的event_dispatcherdebug.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服务仅用于内核事件,这意味着所有这些捆绑作者都在滥用它?

或者(最有可能的候选人),是否是我缺少或未考虑的其他内容?

php events symfony

13
推荐指数
1
解决办法
5938
查看次数

Cron"步骤"如何运作?

我遇到的情况是,我认为每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".

手册的描述("指定通过范围跳过数字的值")有点模糊,"每两个小时"的例子有点误导(这可能导致应用程序中的错误)

那么,有两个问题:

  1. unix cron程序如何使用"步骤"信息(斜杠后的数字)来决定是否应该跳过运行作业?(模块化划分?如果是这样,关于什么?决定"真正"运行的条件是什么,哪些决策不是?或者是其他什么?)

  2. 是否可以将unix cron作业配置为每隔"N"分钟运行一次?

unix cron

13
推荐指数
1
解决办法
6770
查看次数

使用数字键作为对象转换数组

我在探讨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 arrays casting

12
推荐指数
2
解决办法
4994
查看次数