Salut ! J'ai fait un blog avec cakephp, et quand j'essaie de faire la modification ça me retourne une erreur comme telle : strtolower() expects parameter 1 to be string, array given [CORE\Cake\Network\CakeRequest.php, line 496], j'ai essayé de modifier sauf que ça ne marche toujours pas. Donc si vous pouvez m'aider à resoudre cela.
Merci!!!!!!!!!!!!!

8 réponses


Lartak
Réponse acceptée

Bonjour.
Si tu nous montrait le code concerné, nous pourrions peut-être t'aider.

babela
Auteur
Réponse acceptée

Solution trouvée! Votre contribution m'a beaucoup aidée, grâce à elle, j'ai résolu mon problème. Merci beaucoup. Passez un bon dimanche! Encore merci

babela
Auteur
Réponse acceptée

Merci ! Voici la solution :
public function edit($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}

    $post = $this->Post->findById($id);

    if (!$post) {
        throw new NotFoundException(__('Invalid post'));
    }

public function edit($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}

    $post = $this->Post->findById($id);

    if (!$post) {
        throw new NotFoundException(__('Invalid post'));
    }

    //if ($this->request->is(array('post', 'put'))) {
    if($this->request->is('post') || $this->request->is('put')){
        $this->Post->id = $id;

        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash(__('Your post has been updated.'));
            return $this->redirect(array('action' => 'index'));
        }

        $this->Session->setFlash(__('Unable to update your post.'));
    }

    if (!$this->request->data) {
        $this->request->data = $post;
    }
}

    if($this->request->is('post') || $this->request->is('put')){
        $this->Post->id = $id;

        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash(__('Your post has been updated.'));
            return $this->redirect(array('action' => 'index'));
        }

        $this->Session->setFlash(__('Unable to update your post.'));
    }

    if (!$this->request->data) {
        $this->request->data = $post;
    }
}

Bah sans ton code on ne va pas pouvoir faire grand chose...

babela
Auteur

Merci d'avoir réagit à mon problème . Voici le code de la mdification : public function edit($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}

    $post = $this->Post->findById($id);

    if (!$post) {
        throw new NotFoundException(__('Invalid post'));
    }

    if ($this->request->is(array('post', 'put'))) {
        $this->Post->id = $id;

        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash(__('Your post has been updated.'));
            return $this->redirect(array('action' => 'index'));
        }

        $this->Session->setFlash(__('Unable to update your post.'));
    }

    if (!$this->request->data) {
        $this->request->data = $post;
    }
}

Et en voici l'erreur:
strtolower() expects parameter 1 to be string, array given [CORE\Cake\Network\CakeRequest.php, line 496]
babela
Auteur

Voici le code qui fait la modification :

public function edit($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}

    $post = $this->Post->findById($id);

    if (!$post) {
        throw new NotFoundException(__('Invalid post'));
    }

    if ($this->request->is(array('post', 'put'))) {
        $this->Post->id = $id;

        if ($this->Post->save($this->request->data)) {
            $this->Session->setFlash(__('Your post has been updated.'));
            return $this->redirect(array('action' => 'index'));
        }

        $this->Session->setFlash(__('Unable to update your post.'));
    }

    if (!$this->request->data) {
        $this->request->data = $post;
    }
}

Et l'erreur renvoiée :
strtolower() expects parameter 1 to be string, array given [CORE\Cake\Network\CakeRequest.php, line 496]
la fonction où il y al'erreur:
public function is($type) {
    $type = strtolower($type);
    if (!isset($this->_detectors[$type])) {
        return false;
    }
    $detect = $this->_detectors[$type];
    if (isset($detect['env'])) {
        if (isset($detect['value'])) {
            return env($detect['env']) == $detect['value'];
        }
        if (isset($detect['pattern'])) {
            return (bool)preg_match($detect['pattern'], env($detect['env']));
        }
        if (isset($detect['options'])) {
            $pattern = '/' . implode('|', $detect['options']) . '/i';
            return (bool)preg_match($pattern, env($detect['env']));     
        }
    }
    if (isset($detect['param'])) {
        $key = $detect['param'];
        $value = $detect['value'];
        return isset($this->params[$key]) ? $this->params[$key] == $value : false;
    }
    if (isset($detect['callback']) && is_callable($detect['callback'])) {
        return call_user_func($detect['callback'], $this);
    }
    return false;
}

Et quand j'essai de mettre true à la place de false (ligne 498), ça marche, mais après ça ne fait plus rien

Quand tu fais ton if($this->request->is(...)), tu lui passe un array.

Faut que tu utilise un OR et faire 2 conditions :

if($this->request->is('post') || $this->request->is('put'))

Pense a passer ton post en résolu :)