параметр не передается с POST - PullRequest
0 голосов
/ 05 сентября 2018

по какой-то причине функция updateAction получает параметр $ id и показывает содержимое $ article, но при попытке обновления с помощью POST возвращает: 'Uncaught ArgumentCountError: слишком мало аргументов для функции ArticleController :: updateAction ()'.

router.php

$router->add('/admin/{id:[0-9]+}', ['controller' => 'article', 'action' => 'update',]);

ArticleController.php

public function updateAction($id)
{
    $article = Article::findFirstById($id);
    $this->view->article = $article;

    if ($this->request->isPost()) {
        $article->title = $this->request->getPost('title');
        $article->content = $this->request->getPost('content');
        $article->created_at = $this->request->getPost('created_at');
        $article->save();
        $this->dispatcher->forward(array('controller' => 'admin', 'action' => 'index'));
    }
}

update.php

{{ form('article/update', 'method': 'post')}}
    <p>
        <label for='title'>Article Title</label>
        <textarea>{{ article.title }}</textarea>
    </p>

    <p>
        <label for='content'>Article Content</label>
        <textarea>{{ article.content }}</textarea>
    </p>

    <p>
        <label for='created_at'>Publication Date</label>
        <textarea>{{ article.created_at }}</textarea>
    </p>

    <p>
        {{ submit_button('Save Changes') }}
        {{ submit_button('Cancel') }}
    </p>
{{ end_form() }}

где может быть проблема? спасибо

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

В update.php добавить id скрытое поле с идентификатором в качестве значения.
В ArticleController.php удалите параметр $id из updateAction(). Вы можете получить его через:

$this->request->getPost('id')

Вы также можете добавить две первые строки кода к проверке isPost: запросы к базе данных дороги, поэтому лучше сначала проверить эту isPost(), а затем выполнить запрос.

Возможно, вы захотите изучить эту статью из документации, чтобы начать работу с формами Phalcon: https://docs.phalconphp.com/en/3.3/tutorial-invo#working-with-crud

0 голосов
/ 15 сентября 2018

Вам необходимо передать идентификатор для модели артикула. Если вы хотите использовать GET для $ id, вы можете добавить его к сообщению.

{{ form('article/update/{{ article.id }}', 'method': 'post')}}

, чтобы быть в безопасности, вы можете проверить, есть ли статья в базе данных или нет.

if($!article = Article::findFirstById($id))
{
   return $this->response->redirect("/article/new");
}
0 голосов
/ 05 сентября 2018

{{ form('article/update', 'method':'post')}} Вы не передаете здесь идентификатор. Метод будет по умолчанию пост.

РЕДАКТИРОВАТЬ: На самом деле я думаю, что такая вещь должна работать: {{ form(['article_update', 'id:' article.id], 'method:post') }}

На самом деле нет способа передать аргумент здесь, как я думаю https://github.com/phalcon/cphalcon/blob/master/phalcon/tag.zep#L1081

Просто напишите это так - <form action={{ url(['for':'article/update', 'id': article.id]) }} method="post">

Но я понимаю, почему они сделали это так, я думаю, возможно, чтобы поощрить разработчиков иметь одну конечную точку для создания / обновления с идентификатором, предоставленным в качестве скрытого элемента ввода, но это в целом плохая концепция.

...