我有一个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.
它未被发送或未被正确接收.使用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) 我们在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吗?它似乎工作,但我找不到其他人这样做,我找不到任何建议或推荐的例子.
我在雄辩的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脚本中注册,因此它会在每个页面上加载,即使它不包含任何类.
谢谢大家.不应该假设在现代框架中一切都必须是命名空间类.
我可以通过管理页面将逗号分隔值(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()可能)和一些其他参数,但细节超出了我的范围.
我正在使用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_meta和added_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) 这是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在某个地方,但是如何实现它,以及如何向其添加一些消息以显示在当前页面中?
给定2D平面中的两个点,以及与这两个点相交的半径r的圆,计算该圆的中心的公式是什么?
我意识到圆圈可以放置两个位置.我想要的是,当从任意角度开始扫描连接这些点中的一个点的两个点的线时,首先以顺时针方向遇到中心的圆.在我找到第一部分的答案后,我想这是我问题的下一个阶段.
我希望整个计算可以在没有三角法的情况下完成.我从整数坐标开始,如果有帮助,将以整数坐标结束.
我似乎无法为这一个找到明确的答案.
使用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脚本需要从应用程序中获取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请求才能使用它.
我从一些任意深度的嵌套数组开始。在该数组中,某些键是一系列用点分隔的令牌。例如“ 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) 我从一个包含随机顺序的数百个文件(完整路径)列表的文件开始.我想列出该列表中十个最新文件的详细信息.这是我天真的尝试:
$ 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"要处理的文件列表,这些文件可能包含空格 - 看起来它应该很简单,但我很难过.
我正在寻找数据迁移项目中缺少的数据,这份报告对我帮助很大.
给定一个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)