2014-11-21 3 views
1

Я пытаюсь создать небольшое приложение CRUD с помощью этого учебника: http://www.yiiframework.com/wiki/490/creating-a-simple-crud-app-with-yii2/Yii2/PostgreSQL - Вызов неизвестного метода: юй дб ActiveQuery :: FORMNAME()

Все, кроме обновления и функции удаления работает , Когда я нажимаю на «обновление», я получаю следующее сообщение об ошибке:

Calling unknown method: yii\db\ActiveQuery::formName()

Когда я нажимаю на «удалить», я получаю эту ошибку:

Method Not Allowed. This url can only handle the following request methods: POST.

Это мои функции SiteController:

public function actionDelete($id=NULL) 
{ 
    $model = $this->loadModel($id); 

    if (!($model->delete())) 
    { 
     Yii::$app->session->setFlash('error', 'Unable to delete model'); 
    } 

    $this->redirect(\Yii::$app->urlManager->createUrl('site/index')); 
} 

public function actionSave($id=NULL) 
{ 
    if ($id == NULL) 
    { 
     $model = new Crud; 
    } else { 
     $model = $this->loadModel($id); 
    } 

    if(isset($_POST['Crud'])) 
    { 
     $model->load($_POST); 

     if ($model->save()) 
     { 
      Yii::$app->session->setFlash('success', 'Model has been saved'); 
      $this->redirect(['save', 'id' => $model->id]); 
     } else { 
      Yii::$app->session->setFlash('error', 'Model could not be saved'); 
     } 
    } 
    echo $this->render('save',['model' => $model]); 
} 

private function loadModel($id) 
{ 
    $model = Crud::find($id); 

    if ($model == NULL) 
    { 
     throw new HttpException(404, 'Model not found'); 
    } 

    return $model; 
} 

Кто-нибудь знает, что я делаю неправильно? Спасибо заранее!

EDIT: полное сообщение об ошибке:

exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request: site/error' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Controller.php:122 
Stack trace: 
#0 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('error', Array) 
#1 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\web\ErrorHandler.php(79): yii\base\Module->runAction('site/error') 
#2 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\ErrorHandler.php(95): yii\web\ErrorHandler->renderException(Object(yii\web\MethodNotAllowedHttpException)) 
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\MethodNotAllowedHttpException)) 
#4 {main} 
Previous exception: 
exception 'yii\web\MethodNotAllowedHttpException' with message 'Method Not Allowed. This url can only handle the following request methods: POST.' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\filters\VerbFilter.php:105 
Stack trace: 
#0 [internal function]: yii\filters\VerbFilter->beforeAction(Object(yii\base\ActionEvent)) 
#1 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Component.php(538): call_user_func(Array, Object(yii\base\ActionEvent)) 
#2 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Controller.php(259): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 
#3 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\web\Controller.php(108): yii\base\Controller->beforeAction(Object(yii\base\InlineAction)) 
#4 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Controller.php(149): yii\web\Controller->beforeAction(Object(yii\base\InlineAction)) 
#5 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('delete', Array) 
#6 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\web\Application.php(83): yii\base\Module->runAction('site/delete', Array) 
#7 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) 
#8 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\basic2\web\index.php(12): yii\base\Application->run() 
#9 {main} 

EDIT2: Мое мнение (save.php) содержит следующее:

<?php 
use yii\helpers\Html; 
use yii\widgets\ActiveForm; 
?> 

<?php $form = ActiveForm::begin(); ?> 

    <?php echo $form->field($model, 'name')->textInput(array('class' => 'form-control')); ?> 
    <?php echo $form->field($model, 'alter')->textInput(array('class' => 'form-control')); ?> 

<?php echo Html::submitButton('Senden', array('class' => 'btn btn-primary pull-right')); ?> 
<?php ActiveForm::end(); ?> 

Мой взгляд index.php содержит следующее:

<?php 
use yii\helpers\Html; 

$this->title = 'CRUD'; 
?> 


<?php echo Html::a('Neuen Eintrag erstellen', array('site/save'), array('class' => 'btn btn-primary pull-right')); ?> 

<div class="clearfix"></div> 
<hr /> 
<table class="table table-striped table-hover"> 
    <tr> 
     <td>ID</td> 
     <td>Name</td> 
     <td>Alter</td> 
     <td> </td> 
    </tr> 
    <?php foreach ($models as $post): ?> 
     <tr> 
      <td><?php echo Html::a($post->id, array('site/save', 'id'=>$post->id)); ?></td> 
      <td><?php echo Html::a($post->name, array('site/save', 'id'=>$post->id)); ?></td> 
      <td><?php echo Html::a($post->alter, array('site/save', 'id'=>$post->id)); ?></td> 
      <td> 
       <?php echo Html::a('Update', array('site/save', 'id'=>$post->id)); ?> 
       <?php echo Html::a('Delete', array('site/delete', 'id'=>$post->id)); ?> 
      </td> 
     </tr> 
    <?php endforeach; ?> 
</table> 

ответ

1

Если вы хотите удалить запись, вы должны получить ее, как показано ниже:

$model = Crud::find($id)->one(); 

Итак:

$model = Crud::find($id)->one()->delete(); 

Или вы можете использовать это:

protected function findModel($id) 
{ 
    if (($model = Crud::findOne($id)) !== null) { 
     return $model; 
    } else { 
     throw new NotFoundHttpException('The requested page does not exist.'); 
    } 
} 

Тогда в действии:

$model = $this->findModel($id); 

if (!($model->delete())) 
{ 
    Yii::$app->session->setFlash('error', 'Unable to delete model'); 
} 

$this->redirect(\Yii::$app->urlManager->createUrl('site/index')); 

Method Not Allowed. This url can only handle the following request methods: POST.

Выше ошибка обычно связанные с типом запроса, который разрешен только POST. Чтобы исправить это, вы должны сказать Yii2, чтобы он обрабатывал его, как показано ниже:

+0

Спасибо, сообщение «Метод не найден» больше не отображается в PhpStorm, но ошибка сверху остается. Я добавил полное сообщение об ошибке в свой первый пост. – Gummikuchen

+0

@ Gummikuchen Это из-за того, что у вас нет контроллера 'site' и' error'. Убедитесь, что они существуют –

+0

Еще раз спасибо! Первая ошибка исправлена, второй erro все еще встречается: «Метод не разрешен. Этот URL-адрес может обрабатывать только следующие методы запроса: POST». – Gummikuchen

Смежные вопросы