标签: params

PHP:数组到变量函数参数值

我有一个可变长度数组,我需要将其转换为函数的参数列表.

我希望有一个巧妙的方法 - 但我看不出如何.

我正在编写的代码将调用类中的方法 - 但我不知道方法的名称,也不知道它有多少参数.

我试过这个 - 但它不起作用:

$params = array(1 => "test", 2 => "test2", 3 => "test3");
ClassName::$func_name(implode($params, ","));
Run Code Online (Sandbox Code Playgroud)

以上将所有值都归为函数的第一个参数.而它应该使用3个参数值(test,test2,test3)调用该函数.

我需要的是这个:

ClassName::$func_name("test", "test2", "test3");
Run Code Online (Sandbox Code Playgroud)

任何想法如何做到这一点整洁?

php arrays function params

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

在Rails记录器中包含参数/请求信息?

我试图在我的Rails日志中获取更多信息,特别是请求的URI或当前参数(如果可用)(我感谢他们并不总是这样).但是我似乎无法做到.这是我到目前为止所做的:

#config/environments/production.rb
config.logger = Logger.new(config.log_path)
config.log_level = :error
config.logger.level = Logger::ERROR

#config/environment.rb
class Logger
  def format_message(level, time, progname, msg)
    "**********************************************************************\n#{level} #{time.to_s(:db)} -- #{msg}\n"
  end  
end
Run Code Online (Sandbox Code Playgroud)

所以我可以自定义消息,但我似乎无法在这里访问params/request变量.有谁知道这是否可能,如果是这样的话怎么样?或者,如果有更好的方法来获取此信息?(甚至可能是Redis的基础?)

谢谢你,

ruby logging ruby-on-rails params

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

Rails redirect_to with params

我想传递参数(哈希)redirect_to,如何做到这一点?例如:

hash = { :parm1 => "hi", :parm2 => "hi" }
Run Code Online (Sandbox Code Playgroud)

我想重定向到页面 /hello

这样的网址: /hello?parm1=hi&parm2=hi

ruby-on-rails params

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

Ruby,如何将一个param添加到一个你不知道它是否已经有任何其他param的URL

我必须在不确定的URL中添加一个新的参数param=value.

如果实际的URL已经像这样params

http://url.com?p1=v1&p2=v2
Run Code Online (Sandbox Code Playgroud)

我应该将URL转换为另一个:

http://url.com?p1=v1&p2=v2&param=value
Run Code Online (Sandbox Code Playgroud)

但是如果URL没有任何参数,那么:

http://url.com
Run Code Online (Sandbox Code Playgroud)

我应该将URL转换为另一个:

http://url.com?param=value
Run Code Online (Sandbox Code Playgroud)

我觉得用Regex解决这个问题很担心,因为我不确定寻找存在&就足够了.我想也许我应该将URL转换为URI对象,然后添加param并再次将其转换为String.

寻找已经处于这种情况的人的任何建议.

更新

为了帮助参与,我正在共享一个基本的测试套件:

require "minitest"
require "minitest/autorun"

def add_param(url, param_name, param_value)
  # the code here
  "not implemented"
end

class AddParamTest < Minitest::Test
  def test_add_param
    assert_equal("http://url.com?param=value", add_param("http://url.com", "param", "value"))
    assert_equal("http://url.com?p1=v1&p2=v2&param=value", add_param("http://url.com?p1=v1&p2=v2", "param", "value"))
    assert_equal("http://url.com?param=value#&tro&lo&lo", add_param("http://url.com#&tro&lo&lo", "param", "value"))
    assert_equal("http://url.com?p1=v1&p2=v2&param=value#&tro&lo&lo", add_param("http://url.com?p1=v1&p2=v2#&tro&lo&lo", "param", "value"))
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby url params

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

当不能简单地过载时,混合可选参数和参数

此问题类似,我想将可选参数与params关键字混合,这当然会产生歧义.不幸的是,创建重载的答案不起作用,因为我想利用调用者信息属性,如下所示:

    public void Info(string message, [CallerMemberName] string memberName = "", 
                     [CallerLineNumber] int lineNumber = 0, params object[] args)
    {
        _log.Info(BuildMessage(message, memberName, lineNumber), args);
    }
Run Code Online (Sandbox Code Playgroud)

在没有可选参数的情况下创建重载会更改调用站点,从而阻止这些特定参数正常工作.

我找到了一个几乎可以工作的解决方案(虽然很难看):

    public void Info(string message, object arg0, [CallerMemberName] string memberName = "",
                     [CallerLineNumber] int lineNumber = 0)
    {
        _log.Info(BuildMessage(message, memberName, lineNumber), arg0);
    }

    public void Info(string message, object arg0, object arg1, [CallerMemberName] string memberName = "",
                     [CallerLineNumber] int lineNumber = 0)
    {
        _log.Info(BuildMessage(message, memberName, lineNumber), arg0, arg1);
    }
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果为最后一个参数指定一个字符串,则重载决策假定您打算memberName在重载中显式指定需要较少的参数,这不是所需的行为.

有没有办法实现这一点(也许使用一些我没有学过的新属性?)或者我们是否只是达到了自动魔法编译器支持可以给我们的极限?

.net c# optional-parameters params callermembername

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

C#Lambda中的变量参数

是否可以使用C#lambda/delegate来获取可以使用Dynamic-invoke调用的可变数量的参数?

我在这种情况下使用'params'关键字的所有尝试都失败了.


来自答案的工作代码更新:

delegate void Foo(params string[] strings);

static void Main(string[] args)                       
{
    Foo x = strings =>
    {
        foreach(string s in strings)
            Console.WriteLine(s);
    };

    //Added to make it clear how this eventually is used :)
    Delegate d = x;

    d.DynamicInvoke(new[]{new string[]{"1", "2", "3"}});
}
Run Code Online (Sandbox Code Playgroud)

c# lambda params

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

如何在Rails的map.resources()中重命名默认标识符param"id"?

我喜欢Rail的map.resources生成的所有默认路由.但是,有些情况下我想在我的路线中使用非数字标识符.例如,如果嵌套路由由用户及其文章组成,则可以按如下方式编写标准路由:

map.resources :users, :has_many => [:articles] # => e.g. '/users/:id/articles/:id'
Run Code Online (Sandbox Code Playgroud)

但是,有许多优点/原因不使用Rails生成的默认数字标识符.有没有办法将default:id params替换为我选择的另一个规范标识符,而不会为每个标准操作编写自定义路由?如果我想要一个以下格式的路线:

'/users/:login/articles/:id'
Run Code Online (Sandbox Code Playgroud)

这种路线是否可以使用map.resources实现?

resources routes ruby-on-rails params

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

有趣的"参考参考"功能,任何解决方法?

我想知道是否有任何类似的东西可以用于价值类型......

public static class ExtensionMethods {
    public static void SetTo(this Boolean source, params Boolean[] bools) {
        for (int i = 0; i < bools.Length; i++) {
            bools[i] = source;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么这是可能的:

Boolean a = true, b, c = true, d = true, e;
b.SetTo(a, c, d, e);
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为bools是一个值类型,因此它们作为值传递给函数,而不是作为引用.

除了将值类型包装到引用类型中(通过创建另一个类),有没有办法在使用params修饰符时通过引用(ref)将变量传递给函数?

c# extension-methods reference params

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

Yii findByAttributes()具有大于属性.

我一直在使用Yii一段时间,当我想从数据库中提取数据时,我通常只使用findByAttributes.

$model=Auction::model()->findAllByAttributes(array('status'=>'1'));
Run Code Online (Sandbox Code Playgroud)

或类似的规定.

我的问题是,我将如何处理大于类型的情况?我试过了

$model=Auction::model()->findAllByAttributes(array('starttime'>=$date));
Run Code Online (Sandbox Code Playgroud)

其中日期已分配当前日期/时间设置,但这会导致错误.所以我的问题是我需要使用条件和/或参数吗?我应该在模型中使用Criteria或CActiveDataProvider这样的东西吗?

我希望有人指出我正确的方向.我总是通过使用findAll()来获得,但我知道他们是更好的方法.关于什么以及何时使用属性,条件,参数等的一般信息也很好.

我已阅读Yii文档并搜索了大量网站以获取这些问题的答案,我找不到它.

php attributes params yii conditional-statements

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

如何从Rails 4中的ActionDispatch :: ParamsParser :: ParseError中解救

Rails 4添加了一个异常ActionDispatch :: ParamsParser :: ParseError异常,但由于它在中间件堆栈中,它似乎无法在普通控制器环境中获救.在json API应用程序中,我想用标准错误格式进行响应.

这个要点显示了插入中间件以拦截和响应的策略.遵循这种模式我有:

application.rb中:

module Traphos
  class Application < Rails::Application
    ....
    config.middleware.insert_before ActionDispatch::ParamsParser, "JSONParseError"
 end
end
Run Code Online (Sandbox Code Playgroud)

中间件是:

class JSONParseError
  def initialize(app)
    @app = app
  end

  def call(env)
    begin
      @app.call(env)
    rescue ActionDispatch::ParamsParser::ParseError => e
      [422, {}, ['Parse Error']]
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我在没有中间件的情况下运行测试,我会得到(spec):

Failures:

  1) Photo update attributes with non-parseable json
     Failure/Error: patch update_url, {:description => description}, "CONTENT_TYPE" => content_type, "HTTP_ACCEPT" => accepts, "HTTP_AUTHORIZATION" => @auth
     ActionDispatch::ParamsParser::ParseError:
       399: unexpected token at 'description=Test+New+Description]'
Run Code Online (Sandbox Code Playgroud)

这正是我所期望的(ParseError,我无法rescue_from). …

ruby ruby-on-rails exception params rescue

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