小编Jas*_*son的帖子

初始化动态创建的select2

我有一个select2下拉列表,我提供了一个匹配器功能.它在初始页面加载时初始化为:

jQuery(document).ready(function() {
    jQuery(".my_select2").select2({
        matcher: function(term, text) {...}
    });
});
Run Code Online (Sandbox Code Playgroud)

这适用于初始页面加载.

现在,我有额外的下拉菜单(select动态创建的元素(通过AJAX拉入,即jQuery(match).load(url).这些额外的下拉菜单不会作为select2小部件进行初始化,这是可以理解的,即使它们与原始的select2选择器匹配).

那么,我怎样才能告诉jQuery将这些动态创建的select元素视为需要初始化的select2项?我可以在匹配元素上设置某种"监视",这样每次匹配元素添加到页面时,select2初始化都会启动吗?

我记得live()前一段时间在jQuery中引入过,如果我正确理解了匹配元素,它们会在创建之前支持它们.我从未使用过该功能,现在看来已弃用.但它确实感觉像我正在寻找的那种东西.

这是一个WordPress插件,目前使用jQuery v1.11.2.

jquery jquery-select2

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

Guzzle没有正确发送PSR-7 POST机身

它未被发送或未被正确接收.使用curl命令行直接(使用-d选项)或PHP(使用CURLOPT_POSTFIELDS)做的工作.

我从PSR-7请求开始:

$request = GuzzleHttp\Psr7\Request('POST', $url);
Run Code Online (Sandbox Code Playgroud)

我添加了身份验证标头,它正确地对API进行身份验证:

$request = $request->withHeader('Authorization', 'Bearer ' . $accessToken);
Run Code Online (Sandbox Code Playgroud)

然后我添加请求正文:

// The parameter for the API function
$body = \GuzzleHttp\Psr7\stream_for('args=dot');
$request = $request->withBody($body);
Run Code Online (Sandbox Code Playgroud)

我可以将消息发送到API:

$client = new \GuzzleHttp\Client();
$response = $client->send($request, ['timeout' => 2]);
Run Code Online (Sandbox Code Playgroud)

我收到的响应表明API根本看不到"args"参数.我已经尝试将身份验证令牌移动到args:

'args=dot&access_token=123456789'
Run Code Online (Sandbox Code Playgroud)

这应该可以工作,并且可以在命令行(-d access_token=123456789)中使用curl,但是在上面发送cia curl(6.x)时API也无法看到该参数.

我可以看到消息确实包含正文:

var_dump((string)$request->getBody());
// string(8) "args=dot"
// The "=" is NOT URL-encoded in any way.
Run Code Online (Sandbox Code Playgroud)

那么这里可能出现什么问题?参数是否未被发送,或者是否以错误的格式发送(可能是'='正在编码?),或者可能是使用的内容类型错误?使用Guzzle时很难看到"在网上"发送了什么,因为HTTP消息被格式化并发送了很多层.

编辑:调用本地测试脚本而不是远程API,我得到这个原始消息详细信息:

POST
CONNECTION: close
CONTENT-LENGTH: 62
HOST: acadweb.co.uk
USER-AGENT: GuzzleHttp/6.1.1 curl/7.19.7 …
Run Code Online (Sandbox Code Playgroud)

guzzle psr-7

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

网址可以以"//"开头吗?

可能重复:
在<script src ="...">中用//替换是否有效?

我们在http [s]://A.example.com/上有一个网站,它引用了http [s]上的一些资源(JS和CSS)://A.example.com/

如果在主要站点A正在使用时引用资源时使用相同的方案,则有意义并避免一些浏览器警告.站点A使用PHP,因此我们可以以编程方式检测当前方案(http或https)并将其插入页面的标题中.

但是,我们发现只使用'//'代替方案也可以.

因此,无论我们是使用http还是https访问网站A,网站A都可以在我们尝试的所有浏览器中引用"//B.example.com/theme/main.css"而不会出现问题.

我的问题是:这是一个有效的URL吗?它似乎工作,但我找不到其他人这样做,我找不到任何建议或推荐的例子.

url ssl https http

6
推荐指数
1
解决办法
6539
查看次数

PHP中使用的"with"是什么?

我在雄辩的ORM库中遇到过这一行:

return with(new static)->newQuery();
Run Code Online (Sandbox Code Playgroud)

我以前从未见过"使用过",并且在PHP文档中找不到它.我猜测"with"在大多数搜索中都是一个停止词,所以我甚至没有接近.

在PHP编程的多年中从未遇到过"with",我觉得我错过了.它有什么作用?我确实遇到过一条关于ORM的评论,提到PHP-5.4中不再需要"with",但这就像说的那样多.如果这是准确的,那么知道PHP-5.4的等价物是多么好.

更新:支持答案的详细信息: -

我在Laravel的Immuminate/Support/helpers.php帮助程序脚本中找到了这个辅助函数:

if ( ! function_exists('with'))
{
    /**
     * Return the given object. Useful for chaining.
     *
     * @param  mixed  $object
     * @return mixed
     */
    function with($object)
    {
        return $object;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如一些答案中所提到的那样.该全局范围函数允许在一个语句中创建对象并在t中运行方法.安装Laravel时,它(以某种方式)在composer autoload_files.php脚本中注册,因此它会在每个页面上加载,即使它不包含任何类.

谢谢大家.不应该假设在现代框架中一切都必须是命名空间类.

php

6
推荐指数
1
解决办法
194
查看次数

CSV数据可以通过API发送到OpenERP/Odoo吗?

我可以通过管理页面将逗号分隔值(CSV)数据导入大多数模型.此过程处理外部ID,以便可以在以后的CSV导入中添加或修改数据.这是一种琐碎的行为.

通过API,可以创建和修改相同的记录,并可以设置外部ID.但是,这需要在使用API​​推送数据的外部应用程序中手动编码CSV导入器处理的许多逻辑.通过API推送数据可以实现自动化.

是否有一种方法可以使用API​​(因此不需要对Odoo中的代码进行任何更改)来推送CSV数据(因此插入/更新/关系/外部ID等的逻辑由Odoo处理)?这将是一种混合方法,我试图避免在Odoo中创建导入模块的需要.

编辑:"外部ID"通常称为"XML ID".我认为这是一个与早期版本的OpenERP相悖的术语,而不是与XML有关的任何内容.

编辑

此页面描述了一个load()函数,该函数通过管道将类似CSV的数据推送到系统中:

http://openerp-server.readthedocs.org/en/latest/06_misc_import.html

如果可能的话,我无法看到如何将该页面上的摘要转换为通过API的操作.我猜我需要接口(入口点),模型,方法(load()可能)和一些其他参数,但细节超出了我的范围.

xml-rpc openerp odoo

6
推荐指数
1
解决办法
3531
查看次数

在WordPress中创建帖子时掌握元数据

我正在使用save_post操作来检查自定义帖子中的元数据字段并对该值执行一些操作。这是我做事的基本要点:

add_action('save_post', 'my_save_post');

function my_save_post($post_id)
{
    // Check if not autosaving, processing correct post type etc.
    // ...

    // Get the custom field value.
    $my_field_value = get_post_meta($post_id, 'my_field', true);

    // Do some action
    // ...
}
Run Code Online (Sandbox Code Playgroud)

通过管理页面更新帖子时,效果很好。但是,在首次创建帖子时,my_field_value始终为空。该字段确实得到正确保存,但是此操作触发器似乎无法看到它,也看不到任何其他自定义字段值。

我希望对创建的所有此类帖子执行该操作,并且我将通过CSV导入插件导入许多内容。即使这样,也确实可以正确导入自定义字段,并且确实会为导入的每一行触发操作触发器,但是save_post操作仍然看不到自定义字段值。

据我从文档中看到的那样,该操作触发时,该帖子已经创建了,因此我应该始终能够看到该自定义元字段。


答案似乎是事情发生的顺序。从表单创建帖子时,所有自定义字段均由相应的操作收集,并在我的save_post操作触发之前添加到帖子中。这意味着我的触发器能够看到那些自定义字段值。

从CSV导入时,首先创建基本帖子,然后添加自定义元字段。在添加元字段之前,save_post触发器在首次创建时触发,因此自定义字段数据对save_post操作不可见。

我的解决方案是使用updated_post_metaadded_post_meta动作以及save_post动作来捕获元数据的更新:

add_action('updated_post_meta', 'my_updated_post_meta', 10, 4);
add_action('added_post_meta', 'my_updated_post_meta', 10, 4);

function my_updated_post_meta($meta_id, $post_id, $meta_key, $meta_value)
{
    // Make sure we are handling just the meta field we are interested in. …
Run Code Online (Sandbox Code Playgroud)

wordpress

5
推荐指数
1
解决办法
2394
查看次数

在$ error MessageBag中添加一条消息

这是Laravel 4.2

Laravel将为视图提供$ error MessageBag.这可以通过重定向在前一页中使用flash消息填充->withErrors().如果您要重定向到新页面,那很好.

return Redirect::route('my_route')->withErrors($validator);
Run Code Online (Sandbox Code Playgroud)

我在控制器中生成了一些错误,没有验证表单,并希望将这些消息放入Laravel自动传递给视图的$ errors MessageBag中.但是怎么样?MessageBag在某个地方,但是如何实现它,以及如何向其添加一些消息以显示在当前页面中?

php laravel

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

与两点相交的圆心

给定2D平面中的两个点,以及与这两个点相交的半径r的圆,计算该圆的中心的公式是什么?

我意识到圆圈可以放置两个位置.我想要的是,当从任意角度开始扫描连接这些点中的一个点的两个点的线时,首先以顺时针方向遇到中心的圆.在我找到第一部分的答案后,我想这是我问题的下一个阶段.

我希望整个计算可以在没有三角法的情况下完成.我从整数坐标开始,如果有帮助,将以整数坐标结束.

geometry points

4
推荐指数
1
解决办法
6757
查看次数

PHP exec()使用内存

我似乎无法为这一个找到明确的答案.

使用exec()PHP 调用shell命令时,shell命令使用的内存是否计入PHP脚本的内存限制?

我意识到,如果该命令生成大量输出,并且该输出是在$ouput(第二个)参数中捕获的exec(),那么返回的数据可能会破坏PHP内存限制.但是,假设所有输出都发送到文件,如果该exec()命令需要运行128M内存,那么具有64M内存限制的PHP脚本是否能够运行它?

<?php
exec('command_using_128M_memory >/dev/null 2>&1');
Run Code Online (Sandbox Code Playgroud)

我假设PHP5.3 +

php memory exec

4
推荐指数
1
解决办法
3110
查看次数

无法使用Guzzle请求发送cookie

我有一个PHP脚本需要从应用程序中获取CSV文件.应用程序有一个API允许脚本进入,这为脚本提供了一个用于身份验证的会话cookie.然后我需要做一个GET请求来获取CSV文件(API不支持).

使用curl目录工作:

$c = curl_init($url);
curl_setopt($c, CURLOPT_COOKIE, 'PHPSESSID=' . $session_id_from_api);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$csv_file = curl_exec($c);
echo $csv_file;
Run Code Online (Sandbox Code Playgroud)

使用从API登录获得的会话ID获取CSV文件并通过coookie传递.

现在,我想使用Guzzle做同样的事情,但我只是返回登录页面.这是我正在使用的代码:

$client = new Guzzle\Http\Client();
$request = $client->get(
    $url,
    [
        'cookies' => ['PHPSESSID' => $session_id_from_api],
    ]
);
$response = $client->send($request);
echo $response->getBody(true);
Run Code Online (Sandbox Code Playgroud)

这给了我登录页面,因此应用程序的GET无法识别cookie定义的会话.

还有什么我需要做的,以确保我指定的cookie和值被发送到远程应用程序?

编辑:看$request->getRawHeaders(),我在标题中看到这一行:

cookies: vec6nb1egvvui6op7qr7b0oqf6
Run Code Online (Sandbox Code Playgroud)

这显然是不对的.我的Guzzle版本的文档给出了这个例子:

// Enable cookies and send specific cookies
$client->get('/get', ['cookies' => ['foo' => 'bar']]);
Run Code Online (Sandbox Code Playgroud)

这看起来与我传递给Guzzle的内容一致.

为了清楚起见,我不是试图通过多个请求在两个方向上管理cookie,因此不需要存储任何cookie.我有一个cookie名称及其值(来自其他来源),我只想确保将名称和值发送到目标以获得单个GET请求.我不是试图"维持一个会话",但在某种程度上,我正在从应用程序的另一部分(而不是Guzzle)传递给我,并且需要设置我的Guzzle请求才能使用它.

php cookies guzzle

4
推荐指数
1
解决办法
8928
查看次数

将嵌套数组中的“点表示法”键扩展为子数组

我从一些任意深度的嵌套数组开始。在该数组中,某些键是一系列用点分隔的令牌。例如“ billingAddress.street”或“ foo.bar.baz”。我想将这些键元素扩展为数组,因此结果是所有这些键都扩展了的嵌套数组。

例如:

[
    'billingAddress.street' => 'My Street',
    'foo.bar.baz' => 'biz',
]
Run Code Online (Sandbox Code Playgroud)

应该扩展为:

[
    'billingAddress' => [
        'street' => 'My Street',
    ],
    'foo' => [
        'bar' => [
            'baz' => 'biz',
        ]
    ]
]
Run Code Online (Sandbox Code Playgroud)

可以在新的“ billingAddress”数组旁边保留原始的“ billingAddress.street”,但这不是必须的(因此解决方案可以在原始数组上运行或创建新的数组)。可能需要将其他元素(例如“ billingAddress.city”)添加到数组的同一扩展部分。

某些键可能有两个以上的令牌,这些令牌由点分隔,因此需要更深地扩展。

我已经看过了,array_walk_recursive()但这仅适用于元素。对于每个匹配的元素键,我实际上想修改这些元素所在的父数组。

我已经看过array_map,但是它不提供对键的访问,并且据我所知不是递归的。

扩展示例数组:

[
    'name' => 'Name',
    'address.city' => 'City',
    'address.street' => 'Street',
    'card' => [
        'type' => 'visa',
        'details.last4' => '1234',
    ],
]
Run Code Online (Sandbox Code Playgroud)

这将扩展为:

[
    'name' => 'Name',
    'address.city' => 'City', // Optional
    'address' => …
Run Code Online (Sandbox Code Playgroud)

php arrays recursion adyen

3
推荐指数
1
解决办法
360
查看次数

按日期顺序列出文件,文件名中包含空格

我从一个包含随机顺序的数百个文件(完整路径)列表的文件开始.我想列出该列表中十个最新文件的详细信息.这是我天真的尝试:

$ ls -las -t `cat list-of-files.txt` | head -10
Run Code Online (Sandbox Code Playgroud)

这是有效的,只要没有文件中有空格,但如果它们这样做就会失败,因为这些文件在空格处分开并被视为单独的文件.文件"hello world"给了我:

ls: hello: No such file or directory
ls: world: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我试过引用原始文件列表文件中的文件,但是here-document仍然将文件拆分到文件名中的空格处,将引号视为文件名的一部分:

$ ls -las -t `awk '{print "\"" $0 "\""}' list-of-files.txt` | head -10

ls: "hello: No such file or directory
ls: world": No such file or directory
Run Code Online (Sandbox Code Playgroud)

我能想到这样做的唯一方法是单独使用每个文件(或许使用xargs)并创建一个带有文件列表的中间文件,并以可排序的顺序创建日期作为每行中的第一个字段,然后对该中间文件进行排序.然而,这感觉有点麻烦和低效(数百个命令而不是一个或两个).但这可能是唯一的方法呢?

有没有办法传递"ls"要处理的文件列表,这些文件可能包含空格 - 看起来它应该很简单,但我很难过.

bash shell filenames ls spaces

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

计算表的每列中的非空值

我正在寻找数据迁移项目中缺少的数据,这份报告对我帮助很大.

给定一个MySQL表,我想计算该表的每一行中的所有空(NULL或'')值.输出将是列名列表以及每列的空行或非空行数.这些数据是我手动与源表进行比较的方法 - 手动,因为我希望很少有计数完全匹配,并且源名称和导入表之间的列名完全不同.

我有大约30个表要检查,一些有100列.我可以从我的PC直接访问MySQL,但无法使用数据库在服务器上运行任何脚本.

TableA的示例

Col1 Col2 Col3
'XX' NULL 'XX'
'XX' NULL ''
'XX' 'XX' 'XX'
'XX' ''   'XX'
Run Code Online (Sandbox Code Playgroud)

我想要的报告是(对于非空计数,''计为空):

Col1: 4
Col2: 1
Col3: 3
Run Code Online (Sandbox Code Playgroud)

mysql data-migration counting

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