想要将用户输入的文件作为文本进行简单读取.
可以依赖于现代浏览器的使用,所以我使用FileReader(它就像一个魅力).
reader.readAsText(myfile, encoding);
Run Code Online (Sandbox Code Playgroud)
我知道encoding
默认为UTF-8.
但是,由于我的用户将从各种来源(Windows,Mac,Linux)和各种浏览器上传文件,我要求用户通过选择框提供编码.
因此,例如对于西欧的Windows文本文件,我希望用户选择例如windows-1252.
我无法找到FileReader支持的编码列表(假设这至少取决于浏览器).
我不是要求自动确定编码,我只是想以这样的方式填充我的选择框:
<select id="encoding">
<option value="windows-1252">Windows (Western Latin)</option>
<option value="utf-8">UTF-8</option>
<option value="...">...</option>
</select>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
我不想使用任何主要的第三方库.
奖金问题:
有没有一种简单的方法来获得有意义的价值翻译,例如cp10029意味着Mac(中欧)?
我们有一个基于Symfony 3.2(当时以Symfony 2.3开始)和Doctrine ORM 2.5的运行应用程序,它的发展方式非常棒.
我读了很多关于新的Symfony Cache组件,APC和APCU的up和down,opcache,Symfony中的chaching请求等等......但是老实说这次你失去了我一点.
所以我很想知道是否可以支持我1)理解和2)在生产中实现"标准"Symfony/Doctrine应用程序的缓存.
前提条件/假设
1)opcache应该被启用并激活并缓存任何与字节码相关的内容.
2)我目前没有任何要求缓存我自己的应用程序的东西.这些都是关于框架缓存的,如注释,类映射,验证,ORM元数据等.
2)大多数开发人员不想处理多个缓存提供程序,所以无论是APCu,xcache,redis,memcache还是其他任何东西.可能有很好的理由为不同的任务设置不同的任务,但让我们坚持一个以保持简单.
在prod模式下的"标准"Symfony/Doctrine应用程序中缓存选项
1)班级装载
我们仍然有ApcClassLoader app.php
:
$loader = require __DIR__ . '/../app/autoload.php';
include_once __DIR__ . '/../var/bootstrap.php.cache';
$apcLoader = new ApcClassLoader('arcsf2', $loader);
$apcLoader->register(true);
$loader->unregister();
require_once __DIR__ . '/../app/AppCache.php';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$kernel = new AppCache($kernel);
Run Code Online (Sandbox Code Playgroud)
根据我的理解,Symfony只有两个选项,ApcClassLoader和XcacheClassLoader.所以这可能与上面的假设2相矛盾.
题:
是否仍需要/需要/表现得更好才能使用这种缓存ClassLoaders?
或者现在使用标准app.php就够了吗?
$loader = require __DIR__.'/../app/autoload.php';
include_once __DIR__.'/../var/bootstrap.php.cache';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
Run Code Online (Sandbox Code Playgroud)
2)验证缓存
我们仍然有这个config_prod.yml
:
framework:
validation:
cache: validator.mapping.cache.doctrine.apc
Run Code Online (Sandbox Code Playgroud)
题:
老实说,我不知道这是否仍然适用于Symfony 3.2和新的Cache组件.如果需要,如何将其更改为不同的缓存提供程序.我怎么能用Symfony 3.2 Cache将它改成'最新'?
3)Doctrine …
通过cf成功推送我的应用程序后,我通常需要手动ssh-log进入容器并执行几个PHP脚本来清除和预热我的缓存,可能会执行一些数据库架构更新等.
今天我发现了Cloudfoundry Tasks,它似乎提供了一种很好的方式来完成这类事情,我想测试它是否可以将它集成到我的构建和部署脚本中.
所以使用cf登录,成功连接到正确的组织和空间,app已被推送并且正在运行,我尝试了这个命令:
cf run-task MYAPP "bin/console doctrine:schema:update --dump-sql --env=prod" --name dumpsql
(尝试了几个文件夹更改,如app/bin/console等)
这是输出:
Creating task for app MYAPP in org MYORG / space MYSPACE as me@myemail...
Unexpected Response
Response Code: 404
FAILED
使用CF CLI:6.32.0
cf logs ArcticTenTestBackend --recent
没有输出任何东西(这可能是这种情况,因为我已经启用了一个ELK实例进行日志记录 - 因为我想服务连接到ELK查找日志我发现服务连接器cf插件已经消失了我将会开一张新票).
从AngularJs 1.5升级到1.6状态时,$ compile中的更改的文档:
默认情况下禁用对组件/指令控制器实例的预分配绑定,这意味着它们将不再在构造函数内可用.
文档中的升级示例如下(缩写):
之前
.component('myComponent', {
bindings: {value: '<'},
controller: function() {
//...
}
})
Run Code Online (Sandbox Code Playgroud)
后
.component('myComponent', {
bindings: {value: '<'},
controller: function() {
this.$onInit = function() {
// ...
};
}
})
Run Code Online (Sandbox Code Playgroud)
我已经发现我必须使用相同的$ onInit函数为任何使用bindToController的指令:true就像这里:
.directive('acAllocation', acAllocation);
function acAllocation(SomeService) {
return {
restrict: 'E',
replace: true,
scope: {
allocation: '=acAllocation'
},
controller: acAllocationController,
controllerAs: 'vm',
bindToController: true,
templateUrl: 'path/acAllocation.html'
};
function acAllocationController() { …
Run Code Online (Sandbox Code Playgroud) angularjs angularjs-directive angularjs-components angularjs-1.6
我喜欢将 Symfony 中的验证注释与我的巨大实体模型一起使用,如下所示:
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=false, name="name")
*
* @Assert\NotBlank(message="Name must not be empty")
* @Assert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must not be longer than 255 characters")
*/
private $name;
Run Code Online (Sandbox Code Playgroud)
这将确保“名称”永远不会为空、空白或具有 <2 或 > 255 个字符。
但是,当假设有一个类似的字段(例如description)适用相同的规则但它是一个可选属性时,如何实现这一点?
我知道我可以编写回调函数,具有自定义约束等等……但这将迫使我为所有现有的验证器(NotBlank、Length、Number、Valid aso)创建我自己的逻辑。
我会寻找类似的东西:
/**
* @var string
* @ORM\Column(type="string", length=255, nullable=true, name="description")
*
* @OptionalAssert\NotBlank(message="Name must not be empty")
* @OptionalAssert\Length(min=2, minMessage="Name must be at least 2 characters long",max=255, maxMessage="Name must …
Run Code Online (Sandbox Code Playgroud) 我们目前正在构建一个Web 应用程序 (AngularJS),它需要根据动态创建的数据绘制有向无环图(最多 1000 个节点,最多 10000 条边)。
一年多以来,我一直在寻找一个库/工具,它可以计算所需的布局并绘制可以设计样式、缩放和平移、交互式的图表(例如,在鼠标悬停时突出显示子项)。
Graphviz是产生最佳结果的工具,但它还没有真正准备好在网络服务器上使用(特别是因为我无法保证操作系统并且不想这样做)。
我尝试了dagre,它是d3 渲染- 我非常喜欢它,但它有两个主要缺点:1)它并不真正支持排名和聚类 - 这使得输出相当混乱;2)随着图形变得越来越大,其性能也会下降越来越令人无法接受。
接下来看起来真正令人信服的是cytoscape.js,因为输出看起来非常好,并且绘制更大的图形相当快(并允许进行一些性能调整)。但它的标准布局(例如 cose 或宽度优先)不会产生我们需要的输出。
从我目前的角度来看,有两个机会:
1) 使用dagre.js创建布局并使用cytoscape.js绘制结果(布局:“预设”,使用 dagre 布局中计算的节点 x 和 y)。但不支持这种方式的“化合物”/簇。
2)使用[viz.js](https://github.com/mdaines/viz.js)(Graphviz的一个emscripted Javascript版本,在绘制图表时再次表现不佳)将结果计算为简单的输出格式和再次使用这个结果用cytoscape.js绘制它。
现在我的问题:
1)您还有其他想法如何实现它吗?
2)如果我的想法是正确的,你能给我一些关于如何理想地链接链条的提示吗?
(AngularJS -> REST 后端 -> JSON 到前端 -> 为 dagre 或 viz 重构 JSON -> 计算布局 -> 将结果输入到 cytoscape -> 在浏览器中渲染?!?)并且有机会在我的上进行布局计算Node.js 前端服务器而不是客户端本身(同样是由于性能)?
任何提示和想法都受到高度赞赏。
我正在对对象列表进行严格比较,只是为了识别可能已更改的对象,例如:
if ($oldValue !== $newValue)
Run Code Online (Sandbox Code Playgroud)
在某些情况下,$oldValue
并且$newValue
是DateTime
对象。
调试我的应用程序在比较它们之前,我得到了以下两个值的输出:
日期时间对象([日期] => 2017-04-24 00:00:00.000000 [timezone_type] => 3 [timezone] => UTC)
日期时间对象([日期] => 2017-04-24 00:00:00.000000 [timezone_type] => 3 [timezone] => UTC)
为什么我的比较/条件仍然正确?
我们在传统的AngularJs应用程序中遇到了一个旧的重大变化,我们不会很快更新到Angular> 2.
由于AngularJs 1.6 默认$compileProvider.preAssignBindingsEnabled
设置为" true ",但是可以选择将其设置为" false ".
使用AngularJs 1.7不再允许这种行为.
因此,我们必须检查我们在组件/指令中使用绑定的位置,以使用新的$ onInit函数,该函数在所有绑定可用时调用.
因为我们不使用.component
但.directive
仅限于:
是真的,我们只需对所有正在使用的指令应用此更改bindToController: true
吗?
或者其他案例可能被迫考虑?
更新澄清:
我知道我可以在 Symfony 3.2 中定义缓存,就像在 config.yml 中一样:
cache:
default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port%
pools:
my_redis_cache:
adapter: cache.adapter.redis
public: true
default_lifetime: 1200
provider: cache.default_redis_provider
Run Code Online (Sandbox Code Playgroud)
例如在我的控制器中我可以简单地使用
$cache = $this->get('my_redis_cache');
Run Code Online (Sandbox Code Playgroud)
现在,从 Symfony 3.2 开始,我们有了一个名为TagAwareAdapter的奇妙新功能- 它允许通过标签使缓存失效。
这是通过以下代码完成的:
$cache = new TagAwareAdapter(
// Adapter for cached items
new FilesystemAdapter(),
// Adapter for tags
new RedisAdapter('redis://localhost')
);
Run Code Online (Sandbox Code Playgroud)
但我可以在 config.yml 中定义它吗?
我正在寻找类似的东西:
cache:
default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port%
pools:
my_redis_cache:
adapter: cache.adapter.redis
public: true
default_lifetime: 1200
provider: cache.default_redis_provider
my_tag_aware_cache:
adapter: cache.adapter.tagawareadapter
provider:
- my_file_cache
- my_redis_cache
Run Code Online (Sandbox Code Playgroud)
但我不知道如何定义它 - 我已经玩尝试和错误有一段时间了 - 到目前为止我得到的只是错误。
在我的Controller
:
function login(credentials) {
AuthService
.login(credentials)
.then(successCallback, errorCallback);
//same issue with .then(successCallback).catch(errorCallback);
}
function successCallback() {
// do something after success
}
function errorCallback(data) {
// do something after error
}
Run Code Online (Sandbox Code Playgroud)
在我的AuthService
:
authService.login = function (credentials) {
return $http
.post(ENV.apiEndpoint + 'api/v1/login_check', credentials)
.then(
function (result) {
Session.create(result.data.token, result.data.data);
},
function (data) {
Messages.create('Login failed: ' + data.statusText);
}
);
}
Run Code Online (Sandbox Code Playgroud)
当我POST
发送200响应代码时,一切按预期do something after success
执行.
但是当我的POST结果例如在401中我可以看到Messages.create被调用(所以在这种情况下它进入error
路径),但不幸的是我的控制器调用successCallback
而不是errorCallback
. …
angularjs ×3
javascript ×3
php ×3
symfony ×3
cytoscape.js ×1
dagre ×1
datetime ×1
doctrine-orm ×1
encoding ×1
filereader ×1
graph ×1
graphviz ×1
html5 ×1
object ×1
promise ×1
swisscomdev ×1