Gii: Problem mit Db Tabellen die einen Unterstrich im Namen haben

Hallo zusammen,

ich arbeite mich momentan in Yii2Advanced ein, bin also noch absoluter Anfänger.

Seit 3 Tagen habe ich ein Problem welches ich nicht gelöst bekomme.

Die Sufu habe ich auch schon benutzt nur leider nix passendes gefunden.

So folgendes ärgert mich:

Ich habe eine Tabelle in meiner Db mit dem Namen temp_times.

Wenn ich jetzt mit Gii den Model Generator verwende gebe ich folgende Eingabe an:

Table Name: temp_times

Model Class: TempTimes

Namespace: backend\models

Base Class: yii\db\ActiveRecord

Nachdem Preview wird dann die TempTimes.php generiert. Jetzt fuelle ich den CRUD Generator mit folgenden Angaben:

Model Class: backend\models\TempTimes

Search Model Class: backend\models\TempTimesSearch

Controller Class: backend\controllers\TempTimesController

View Path: @backend/views/TempTimes([color="#FF0000"]hier ist der Fehler[/color])

Normalerweise rufe ich nach dem generieren eine index View dann wie folgt auf:

localhost/test/backend/web/index.php?r=temptimes

allerdings wird mir hier immer eine #404 NOT FOUND geworfen (allerdings auch nur wenn der Tabellenname in der DB einen unterstrich enthält). Ist es ein normaler Name ohne Unterstrich wie zB. times, kann ich die index nach dem MODEL und CRUD generieren mittels:

localhost/test/backend/web/index.php?r=times aufrufen.

Hier also meine Frage, wie wird der Unterstrich in einem Tabellennamen einer Datenbank von Gii verarbeitet bzw. wie rufe ich dann eine erstellte index-view auf?

Danke im voraus, viele Grüße…

Versuch’s mal mit

localhost/test/backend/web/index.php?r=temp-times

Hallo, danke für die schnelle Antwort.

Den Namen mit einem Bindestrich trennen habe ich auch schon getestet, leider funktioniert es nicht.

Versuche ich die Seite mit dem Bindestrich anzusprechen bekomme ich folgenden Fehler:

Invalid Parameter – yii\base\InvalidParamException

The view file does not exist: C:\xampp\htdocs\test\backend\views\temp-times\index.php

CamelCase habe ich auch schon getestet

(test\backend\views\tempTimes\index.php sowie test\backend\views\Temptimes\index.php), da bekam ich auch die #404 Not Found

Damit bist du ja schonmal einen Schritt weiter.

404 heißt, Controller/Action wurde nicht gefunden.

"View file does not exists" heißt, Yii hat die passende Action gefunden, konnte den View aber nicht rendern.

Wie sieht dein Controller aus?

Ist der ganz normale Controller der von Gii erzeugt wird:


<?php


namespace backend\controllers;


use Yii;

use backend\models\TempTimes;

use backend\models\TempTimesSearch;

use yii\web\Controller;

use yii\web\NotFoundHttpException;

use yii\filters\VerbFilter;


/**

 * TempTimesController implements the CRUD actions for TempTimes model.

 */

class TempTimesController extends Controller

{

    /**

     * @inheritdoc

     */

    public function behaviors()

    {

        return [

            'verbs' => [

                'class' => VerbFilter::className(),

                'actions' => [

                    'delete' => ['POST'],

                ],

            ],

        ];

    }


    /**

     * Lists all TempTimes models.

     * @return mixed

     */

    public function actionIndex()

    {

        $searchModel = new TempTimesSearch();

        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);


        return $this->render('index', [

            'searchModel' => $searchModel,

            'dataProvider' => $dataProvider,

        ]);

    }


    /**

     * Displays a single TempTimes model.

     * @param integer $id

     * @return mixed

     */

    public function actionView($id)

    {

        return $this->render('view', [

            'model' => $this->findModel($id),

        ]);

    }


    /**

     * Creates a new TempTimes model.

     * If creation is successful, the browser will be redirected to the 'view' page.

     * @return mixed

     */

    public function actionCreate()

    {

        $model = new TempTimes();


        if ($model->load(Yii::$app->request->post()) && $model->save()) {

            return $this->redirect(['view', 'id' => $model->temp_id]);

        } else {

            return $this->render('create', [

                'model' => $model,

            ]);

        }

    }


    /**

     * Updates an existing TempTimes model.

     * If update is successful, the browser will be redirected to the 'view' page.

     * @param integer $id

     * @return mixed

     */

    public function actionUpdate($id)

    {

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


        if ($model->load(Yii::$app->request->post()) && $model->save()) {

            return $this->redirect(['view', 'id' => $model->temp_id]);

        } else {

            return $this->render('update', [

                'model' => $model,

            ]);

        }

    }


    /**

     * Deletes an existing TempTimes model.

     * If deletion is successful, the browser will be redirected to the 'index' page.

     * @param integer $id

     * @return mixed

     */

    public function actionDelete($id)

    {

        $this->findModel($id)->delete();


        return $this->redirect(['index']);

    }


    /**

     * Finds the TempTimes model based on its primary key value.

     * If the model is not found, a 404 HTTP exception will be thrown.

     * @param integer $id

     * @return TempTimes the loaded model

     * @throws NotFoundHttpException if the model cannot be found

     */

    protected function findModel($id)

    {

        if (($model = TempTimes::findOne($id)) !== null) {

            return $model;

        } else {

            throw new NotFoundHttpException('The requested page does not exist.');

        }

    }

}



Dann müsste dein View-Path "temp-times" heißen:

View Path: @backend/views/temp-times

Hallo,

so danke dir :) :) dein folgender Hinweis ist die richtige Lösung gewesen.

Habe den Fehler direkt markiert im ersten Post, und hier nochmal die komplette Lösung:

im Gii CRUD Generator:

Model Class: backend\models\TempTimes

Search Model Class: backend\models\TempTimesSearch

Controller Class: backend\controllers\TempTimesController

View Path: [color="#00FF00"]@backend/views/temp-times[/color]

nach dem generieren ist die view dann ansprechbar über:

localhost/test/backend/web/index.php?r=[color="#00FF00"]temp-times[/color]