Questions tagged «coding-standards»

5
Magento编码标准
我最近开始Magento与Code sniffer广泛合作,我想知道应该遵循哪些标准。 我尝试了Zend编码标准,但是我不想使用80行限制,并且内核中也没有使用它。 在那之后,我尝试了CS2标准,但是由于_in函数和类名中包含各种功能_而没有名称空间,因此这也不起作用。 那么,核心代码是否还有100%符合的标准?如果没有,magento是否应该有自己的编码标准?它有自己的stackexchange网站,扩展开发人员将欢迎使用一些定义明确的编码标准。

2
为什么Magento ECG编码标准中不允许这么多的PHP函数?
Magento ECG编码标准似乎(至少是某种形式)是Magento 1扩展的标准: https://github.com/magento-ecg/coding-standard 但是我不理解所有规则背后的原因,仅代码嗅探器规则和它们的消息并没有多大帮助。是否有关于该标准的详细文档?我知道常见的最佳做法和开发人员指南,但找不到有关这些编码标准的任何具体信息。 最让我困扰的是不使用PHP函数的严格性。 例如:为什么每个与文件系统相关的PHP函数都被禁止? 我想,你应该使用Varien_Io_File,Varien_File_Object等等。但即使是核心开发人员不知道所有的瓦瑞恩类的,你经常会发现类似的事情在Mage_ImportExport_Model_Import_Adapter_Csv: $this->_fileHandler = fopen($this->_source, 'r'); 因此,核心并非经常是最好的例子。 其他恕我直言的可疑禁用功能: mb_parse_str parse_str parse_url base64_decode 是的,它用在后门中,但是禁止eval应该足够了,并且有合法的用例,例如编码二进制数据。除了json_decode(这是禁止的)以外,没有可用的核心帮助程序。 来源:https : //github.com/magento-ecg/coding-standard/blob/master/Sniffs/Security/ForbiddenFunctionSniff.php 本质上,我的问题可以归结为:该标准记录在哪里?和/或是否存在“代替这些本机PHP函数使用的东西”的列表?

2
Magento 2-使用/避免使用吸气剂的良好实践?
Varien_Object(M1)和DataObject(M2)上的魔术吸气剂是常见的做法,但是使用Magento 2时,使用它会感到错误。 好: 容易读/写 坏 在键中使用数字时会引起问题(请参阅:Magento 2:使用驼峰式大小写的不同方式获取集合的字段或获取自定义产品属性) 代码分析工具抱怨不存在的方法 题 使用Magento 2,我们有两种新方法: getDataByKey($key) getDataByPath($path) 是否有充分的理由继续使用getData($key)或使用任何吸气剂? 编辑: @Vinai谢谢。我没有提及该@method方法,因为我的方法大不相同。 它仅对IDE有帮助,对其他方面没有影响。 有几个mergedf PR是“微优化”的,例如在循环外(甚至对于小型阵列)强制转换为数组大小或(int)替代intval()数组大小。 另一方面,有 神奇的吸气剂,正如马吕斯(Marius)所说的那样有些“开销”。 strtolower(trim(preg_replace('/([A-Z]|[0-9]+)/', "_$1", $name), '_')); getData($key) Mehtods还必须额外进行2-3次检查... if ('' === $key) { if (strpos($key, '/')) { if ($index !== null) { 对于自己的代码,完全同意倾向于使用实际方法,但是在相同情况下,这是不可能的...例如,您创建了一个自定义事件... $value = $observer->getVar_1(); $value = $observer->getData('var_1'); $value = …


1
避免在大规模动作中循环保存
我创建了自己的CRUD模块,其中包含类似于CMS页面的内联编辑操作, 一切正常,但是以EcgM2标准运行phpsniffer时,出现以下警告: 在循环中检测到模型LSD方法save() 如何避免这种情况? 注意:如果我“嗅探”上面链接的核心文件,则会出现相同的警告。如果有人需要, 这是我的execute方法。但这与CMS页面控制器中的非常相似 public function execute() { /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->jsonFactory->create(); $error = false; $messages = []; $postItems = $this->getRequest()->getParam('items', []); if (!($this->getRequest()->getParam('isAjax') && count($postItems))) { return $resultJson->setData([ 'messages' => [__('Please correct the data sent.')], 'error' => true, ]); } foreach (array_keys($postItems) as …

5
使用代码嗅探器忽略未使用的参数
我在自定义扩展程序上运行具有EcgM2标准的codeniffer,并且收到警告 方法参数$context从不使用 用于InstallSchema.php文件。 如何使该警告消失? 我的方法如下所示(注意SuppressWarnings顶部): /** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function install(SchemaSetupInterface $setup, ModuleContextInterface $context) { //my install script here that does not use the parameter $context }

4
文件系统最佳实践
我正在开发一些需要从文件系统读取文件的Magento 2扩展程序。 当使用ECGM2标准运行php嗅探器时,它抱怨我正在使用类似basename或的功能dirname。 禁止使用函数dirname() 要么 禁止使用函数basename() 我应该使用哪种包装代替那些包装以获得相同的效果? [编辑] 这是一些代码,但与问题无关。 我有一个扩展\Magento\Framework\Data\Collection\Filesystem类的集合类,我想在网格(ui组件)中列出此集合,并且网格中的动作之一是下载动作。 为此,我需要获取文件的实际名称,以便将其发送到下载操作。 // here $file is dynamic and it can be // folder/filename.xml or folder/subfolder/file.tar.gz //so there is no strict number of folders and subfolders. $file = $downloader->getRelativePath($packageName); $relativeFile = UmcFilesystem::VAR_DIR_NAME . '/' .$file; $absoluteFile = $rootDir->getAbsolutePath($relativeFile); if ($rootDir->isFile($relativeFile) && $rootDir->isReadable($relativeFile)){ …

3
心电图合规性:怎么办?
也有一些是像coding standard为Magento的1,称为ECG其中有大量的事情,应避免或不应该使用的方法。 让我们尝试创建一个列表,其中包含在代码中引发“错误”或“警告”的所有情况。 您将在下面找到所有可能的警告的列表。我会定期更新此帖子,并链接到给定和推荐的答案。 注意:请尽量避免重复的答案;) 下载:https : //github.com/magento-ecg/coding-standard 心电图闻 班级 的MySQL4 Mysql4类已过时。 重写资源模型时如何处理不推荐使用的“ Mysql4”类 将资源文件夹从Mysql4更改为Resource时,Magento 1.9模块奇怪地断开 对象实例化 在Magento中不建议使用直接对象实例化(类%s)。 protected $disallowedClassPrefixes = array( 'Mage_', 'Enterprise_', ); ... 的PHP 去 不鼓励使用goto。 ... 命名空间 未指定“'。$ exceptionClassName。'”类的命名空间。 ... 私人班级成员 检测到私人班级成员。 ... Var 检测到私人班级成员。 ... 性能 收款计数 不必要地加载了Magento数据集合。请改用getSize()方法。 如何检查集合中是否有物品? 全部提取 对于大型数据集,fetchAll()可能会使内存效率低下。 ... GetFirstItem getFirstItem()不会将集合加载的结果限制为一个项目。 GetFirstItem- …


1
什么是静态测试检查?
构建模块后,我尝试运行bin/magento dev:tests:run static。 这报告了我的代码的一些问题,但是我不确定在运行此测试时究竟要检查什么。 官方文件说 静态代码分析检查PHP代码是否符合Magento 2编码标准和最佳实践。它们通常在使用bin / magento工具进行持续集成期间执行。 但这并不意味着什么。 到目前为止,我发现的是。 存在 composer.json 存在 README.md 存在 licence.txt 构造函数参数的顺序与参数的父顺序匹配。 还有什么?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.