用于检查laravel中if语句中的值的语法

时间:2016-06-21 08:52:23

标签: php laravel

以下代码给出了一个错误,你能帮我知道语法问题在哪里吗?

控制器中的代码:

if (in_array($request->get('post_type'), ['newQ', 'newP'])) {
    $category = implode(",", $request->get('catBox'));
} else {
    $category = $request->get('catBox');
}

错误:

  

helpers.php中的ErrorException第747行:preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组,位于Helle.php第747行,HandleExceptions-> handleError(' 2',& #39; preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组',' D:\ wamp \ www \ testSite \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ helpers。 php',' 747',数组('搜索' =>' \?','替换' =>数组(' test',数组('家电','开发'),' Qtop',' 1',& #39; 2016-06-21 07:46:34',' 2016-06-21 07:46:34'),' subject' =>&#39 ;插入帖子(body,cat,post_type,user_id,updated_at,created_at)值(测试,?,?,?,?,?)',' value' =>数组(& #39;家电','发展')))

1 个答案:

答案 0 :(得分:1)

首先,您需要在问题中发布更多代码/上下文。你本质上是重复your other question这是粗鲁的。

其次,您的错误与数据库查询失败有关。您似乎正在使用数组['appliances', 'Development']提交值,而您不应该这样做。您的HTML表单可能有一个数组,在某些情况下您只考虑这一点。试试这段代码:

if (in_array($request->get('post_type'), ['newQ', 'newP'])) {
    $category = implode(",", $request->get('catBox'));
} else {
    $category = implode(",", $request->get('catBox'));
}

如何调试错误

让您的错误更具可读性。

HandleExceptions->handleError(
    '2',
    'preg_replace(): Parameter mismatch, pattern is a string while replacement is an array',
    'D:\wamp\www\testSite\vendor\laravel\framework\src\Illuminate\Support\helpers.php',
    '747', 
    array(
        'search' => '\?',
        'replace' => array(
            'test',
            array('appliances', 'Development'),
            'Qtop',
            '1',
            '2016-06-21 07:46:34',
            '2016-06-21 07:46:34'
        ),
        'subject' => 'insert into posts (body, cat, post_type, user_id, updated_at, created_at) values (test, ?, ?, ?, ?, ?)',
        'value' => array('appliances', 'Development')
    )
);

一点点搜索显示HandleExceptions是一个Laravel类。 The Laravel API docs has a full specification。在文档中,我们看到它需要$context$context是发生错误时发生的事情。

让我们看看第747行的laravel/framework/src/Illuminate/Support/helpers.php。我们发现:

/**
 * Replace a given value in the string sequentially with an array.
 *
 * @param  string  $search
 * @param  array   $replace
 * @param  string  $subject
 * @return string
 */
function str_replace_array($search, array $replace, $subject)
{
    foreach ($replace as $value) {
        $subject = preg_replace('/'.$search.'/', $value, $subject, 1);
    }

    return $subject;
}

将错误消息与str_replace_array()进行比较时,我们可以看到错误消息中显示了每个变量和值。由于PHP停止工作,我们可以假设值是错误之前的最后一个值,因此其中一个值是触发错误的值。

在错误消息中,我们看到:

  

preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组

让我们确定"模式"和"替换"通过查看PHP: preg_replace - Manual。显然,它们是函数参数$pattern$replacement

回顾str_replace_array()我们可以看到错误消息$search中的$pattern$value$replacement

现在错误消息应该更有意义。 $pattern是字符串'\?',而$replacement是数组array('appliances', 'Development')