Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Aula 05 - Deletando os produtos

Boa tarde! Criei os links para Editar e Deletar os Produtos, conforme orientado, mas aparece a seguinte mensagem de erro ao acessar a url "localhost:8765":

"Warning (2): rawurlencode() expects parameter 1 to be string, array given [CORE\src\Routing\Route\Route.php, line 764]"

6 respostas
protected function _writeUrl($params, $pass = [], $query = [])
    {
        $pass = implode('/', array_map('rawurlencode', $pass)); // Linha 764
        $out = $this->template;

        $search = $replace = [];
        foreach ($this->keys as $key) {
            $string = null;
            if (isset($params[$key])) {
                $string = $params[$key];
            } elseif (strpos($out, $key) != strlen($out) - strlen($key)) {
                $key .= '/';
            }
            $search[] = ':' . $key;
            $replace[] = $string;
        }

        if (strpos($this->template, '**') !== false) {
            array_push($search, '**', '%2F');
            array_push($replace, $pass, '/');
        } elseif (strpos($this->template, '*') !== false) {
            $search[] = '*';
            $replace[] = $pass;
        }
        $out = str_replace($search, $replace, $out);

        // add base url if applicable.
        if (isset($params['_base'])) {
            $out = $params['_base'] . $out;
            unset($params['_base']);
        }

        $out = str_replace('//', '/', $out);
        if (isset($params['_scheme']) ||
            isset($params['_host']) ||
            isset($params['_port'])
        ) {
            $host = $params['_host'];

            // append the port & scheme if they exists.
            if (isset($params['_port'])) {
                $host .= ':' . $params['_port'];
            }
            $scheme = isset($params['_scheme']) ? $params['_scheme'] : 'http';
            $out = "{$scheme}://{$host}{$out}";
        }
        if (!empty($params['_ext']) || !empty($query)) {
            $out = rtrim($out, '/');
        }
        if (!empty($params['_ext'])) {
            $out .= '.' . $params['_ext'];
        }
        if (!empty($query)) {
            $out .= rtrim('?' . http_build_query($query), '?');
        }

        return $out;
    }

Alterei a linha:

echo $this->Form->PostLink('Deletar',['controller'=>'produtos','action'=>'deletar',$produto['id'],['confirm'=>'Deletar produto '.$produto['nome'].' ?']]);

Para

echo $this->Form->PostLink('Deletar',['url'=>['controller'=>'produtos','action'=>'deletar',$produto['id'],['confirm'=>'Deletar produto '.$produto['nome'].' ?']]]);

E o erro sumiu!

Opa Jonas,

Que bom que conseguiu resolver! Vou dar uma olhada pra ver se realmente é um erro no curso.

Caso apareça mais algum erro dá um toque aqui pra gente!

Abraço!

Ok! Obrigado! :-)

solução!

Oi Jonas, pode marcar o tópico como solucionado então? Antes disso, me informa aqui a versão do Cake que você instalou por favor?

Joviane, acho que não é um problema no curso em si, é uma diferença entre as versões que o Jonas está usando e a versão que é usada no curso.

De qualquer forma Jonas, obrigado pelo feedback, vamos ver uma forma de colocar uma observação no curso para essa mudança na versão para evitar que outros alunos tenham problemas como esse.

Olá Wanderson! Vou marcar como solucionado! :-) Instalei a versão 3.5.

Obrigado pela resposta!