передача в представление

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

передача в представление

Сообщение arta2 »

Дорогие пользователи этого форума,подскажите как после создания запроса создать передачу модели в представление,покажите на примере как это должно выглядеть???
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

Большое спасибо за ответ,скажу открыто не разбераюсь вообще тяжело даётся мне программирование я самоучка - можете мне дать помощь?
Вот есть action под названием serial для вывода информации о сериале на экран в экшене создан запрос на вывод этой информации из бд,информация вывелась но вывелось всё в куче а не по своим местам что нужно сделать чтобы названия описания и другие данные сериала были на своём месте???вот запрос в экшене

Код: Выделить всё

 <?php
use common\models\Serial;
$model = Serial::find()
-> where(['alias_serial'=> YII::$app->request->get('alias_serial')])
-> one();
?>

<div class="series-view"> 
	<h1>Описание сериала!</h1>
	<table>
		<tbody>

			<tr>
				<td style="padding: 10px 20px 10px; align: center; vertical-align: middle;">
					<img src="/serial/view/id=18" width="160" height="260" alt="">			
				</td>
				<td width="100%">
					<table class="table table-striped table-bordered detail-view">

								
				</td>
		</tr>

			<tr>
				<td colspan="8">
					<div id="serial-view" class="grid-serial";> 
<?php var_dump($model);?>

		            <span style="display: block; margin: 0px 20px;"><?= $value->name ?></span><br><br>
					<span style="display: block; margin: 0px 20px;"><?= $value->name_original ?></span><br><br>

					<span style="display: block; margin: 0px 20px;"><?= $value->discription ?></span><br><br>
					<span style="display: block; margin: 0px 20px;"><?= $value->genre ?></span><br><br>

					<span style="display: block; margin: 0px 20px;"><?= $value->god ?></span><br><br>
					<span style="display: block; margin: 0px 20px;"><?= $value->nachalo ?></span><br><br>

					<span style="display: block; margin: 0px 20px;"><?= $value->konec ?></span><br><br>
					<span style="display: block; margin: 0px 20px;"><?= $value->status ?></span><br><br>
							<thead>
								<tr>
									<th>Название</th><br>
									<th>Орегинальное название</th><br>
									<th>Описание</th><br>
									<th>Жанр</th><br>
									<th>Год выпуска</th><br>
									<th>Начало периода</th><br>
									<th>Конец периода</th><br>
									<th>Статус</th><br>
								</tr>
						</thead>
							<tbody>
								<tr>
									<td colspan="4">
										<div class="empty">Ничего не найдено.</div>
									</td>
								</tr>
							</tbody>
						</table>
					</div>			
				</td>
			</tr>
		</tbody>
	</table>
</div>
вот контроллер

Код: Выделить всё

 <?php
namespace frontend\controllers;

use Yii;
use yii\base\InvalidParamException;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use frontend\models\ContactForm;

use common\models\Serial;
use common\models\Season;
/**
 * Site controller
 */

class SiteController extends Controller
{
    /**
     * {@inheritdoc}
     */

    
    public function actionSerial($id) 
    {
        $model = Post::findOne($id);
        if ($model === null) {
            throw new NotFoundHttpException;
        }

        // рендерит вид с названием `view` и применяет к нему шаблон
        return $this->render('view', [
            'model' => $model,
        ]);
    }

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout', 'signup'],
                'rules' => [
                    [
                        'actions' => ['signup'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

    /**
     * Displays homepage.
     *
     * @return mixed
     */
    public function actionIndex()
    {
            return $this->render('index');
{
                    $my_variable = "My variable";
    return $this->render('index', [
        'my_variable' => $my_variable,
    ]);
}
  }


    //Обявляем экшен
    public function actionSerials()
    {
        //Для начала отдадим какую нибудь страницу для проверки
        //Класс все пока работает! Дальше сделаем запрос сериалов из базы!
        //Надо подключить модель
        $model = Serial::find()->all();
        //Проверим
        //var_dump($model);die;
        //Теперь нужно отправить в представление нашу переменную
        return $this->render('serials', [
            'model' => $model, //теперь проверим пришла ли она к нам!
        ]);
    }




    public function actionSerialOne($alias_serial)//Надо принять этот параметр alias_serial 
    {
        //Так ссылки у нас готовы) Проверим что к нам приходит АЛИАС
        //Щас протестим, интересно
        //var_dump($alias_serial);die;
        //Теперь на основании этого мы можем показать например Сезоны) Ладно допустим,
        //Сейчас такой спорный момент, делать 2 запроса или один. Нам ведь надо узнать id serials чтобы достать  сезоны я сделаю одним!
        $model = (new \yii\db\Query())
            ->select([
                'vk.season.name name_season',
                'vk.season.begin begin_season',
                'vk.season.end end_season',
            ])
            ->from('vk.serial')
            ->where(['alias_serial' => $alias_serial])
            ->leftJoin('vk.season', 'vk.serial.id = vk.season.id_serial')
            ->all();
            //Завтра продолжим)
            //Устал
        //Провери мчто пришло
        //var_dump($model);die;   
    
            //Делаю отступы только для того чтобы удобнее было читать код
        return $this->render('serial');
    }

    /**
     * Logs in a user.
     *
     * @return mixed
     */
    public function actionLogin()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->goBack();
        } else {
            $model->password = '';

            return $this->render('login', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Logs out the current user.
     *
     * @return mixed
     */
    public function actionLogout()
    {
        Yii::$app->user->logout();

        return $this->goHome();
    }

    /**
     * Displays contact page.
     *
     * @return mixed
     */
    public function actionContact()
    {
        $model = new ContactForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail(Yii::$app->params['adminEmail'])) {
                Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
            } else {
                Yii::$app->session->setFlash('error', 'There was an error sending your message.');
            }

            return $this->refresh();
        } else {
            return $this->render('contact', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Displays about page.
     *
     * @return mixed
     */
    public function actionAbout()
    {
        return $this->render('about');
    }

    /**
     * Signs user up.
     *
     * @return mixed
     */
    public function actionSignup()
    {
        $model = new SignupForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', [
            'model' => $model,
        ]);
    }

    /**
     * Requests password reset.
     *
     * @return mixed
     */
    public function actionRequestPasswordReset()
    {
        $model = new PasswordResetRequestForm();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            if ($model->sendEmail()) {
                Yii::$app->session->setFlash('success', 'Check your email for further instructions.');

                return $this->goHome();
            } else {
                Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for the provided email address.');
            }
        }

        return $this->render('requestPasswordResetToken', [
            'model' => $model,
        ]);
    }



    /**
     * Resets password.
     *
     * @param string $token
     * @return mixed
     * @throws BadRequestHttpException
     */
    public function actionResetPassword($token)
    {
        try {
            $model = new ResetPasswordForm($token);
        } catch (InvalidParamException $e) {
            throw new BadRequestHttpException($e->getMessage());
        }

        if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
            Yii::$app->session->setFlash('success', 'New password saved.');

            return $this->goHome();
        }

        return $this->render('resetPassword', [
            'model' => $model,
        ]);

   }
}
 
вот сама модель

Код: Выделить всё

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "serial".
 *
 * @property string $id
 * @property string $name
 * @property string $name_original
 * @property string $discription
 * @property string $genre
 * @property int $god
 * @property int $nachalo
 * @property int $konec
 * @property string $status
 * @property string $alias_serial
 * @property string $img_serial
 */
class Serial extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'serial';
    }

    public function rules()
    {
        return [
            [['name', 'name_original', 'discription', 'genre', 'god', 'nachalo', 'konec', 'status', 'alias_serial', 'img_serial'], 'required'],
            [['discription'], 'string'],
            [['god', 'nachalo', 'konec'], 'integer'],
            [['name', 'name_original', 'genre', 'status', 'alias_serial', 'img_serial'], 'img_serial' =>  255],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'name' => 'Название',
            'name_original' => 'Орегинальное Название',
            'discription' => 'Описание',
            'genre' => 'Жанр',
            'god' => 'Год выпуска',
            'nachalo' => 'Начало выпуска',
            'konec' => 'Конец выпуска',
            'status' => 'Статус',
            'alias_serial' => 'Alias Seria',
            'img_serial' => 'Постер',
            
        ];
    }

    public function upload($model)
    {
        if($this->validate()){
            $source = 'yii\web\UploadedFile;'.'. $this->imageFile->extends';
            $this->imageFile->saveAs($source);
    
            return true;
        }else{
            return false;
        }
    }

}
что где нужно изменить дописать или убрать чтобы всё работало как нужно???
Последний раз редактировалось arta2 2018.05.15, 17:35, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: передача в представление

Сообщение zelenin »

вот ты сюда кинул 500 строк неотформатированного кода. ты серьезно думаешь, что твое нежелание сделать удобно для помогающего сподвигнет его разбираться в коде?
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

извините забыл перед отправкой просмотреть и до отправки указать
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

уважаемые пользователи помогите мне решить и понять данный вопрос,подскажите как разобраться с этим???
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: передача в представление

Сообщение Йож »

Вот заметил такое - если новичек, так делает сайт с фильмами или сериалами :) Есть же DLE)
Судя по всему, у Вас проблема с версткой.

Киньте скрин, что Вам конкретно не нравится в выводе

https://prnt.sc/jicdkl
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: передача в представление

Сообщение urichalex »

Йож писал(а): 2018.05.16, 00:18 Есть же DLE)
Я тут поддерживаю один проектик на дле и чихаюсь каждый день
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: передача в представление

Сообщение proctoleha »

Вообще прямой ответ такой: в нескольких местах кода представление просто вызывается, без передачи параметров.
Например:

Код: Выделить всё

return $this->render('serial');
Должно быть

Код: Выделить всё

return $this->render('serial', ['model' => $model]);
А вообще - это ужас. Нет не так - это УУУУЖЖЖААААСССС! Так писать нельзя, и новичок вы, не новичок без разницы. Есть такой деятель на просторах рунета - М.Ру-ков, вместо дефиса предлог са, вы не по его урокам учились?

Для начала, самое простое - не пишите всё в одном контроллере, контроллер для фильмов - отдельно, для работы с пользователями отдельно. Учите английский будьте внимательны к любой мелочи. Не discription, а description, не nachalo (не помню как точно, но глаз резануло), а start, и т.д. ...
Мелочь, фигня, но с этого все начинается.

Ну и очень много всего еще. Надеюсь вы пишете учебный проект?
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

должно быть вот так https://screenshots.firefox.com/GdrW1KS ... uckt.pp.ua
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

а так вот есть https://prnt.sc/jig211
delgus
Сообщения: 55
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

Re: передача в представление

Сообщение delgus »

Код: Выделить всё

<?php var_dump($model);?>
- вот это что у вас в видах. вот оно и выводится)
delgus
Сообщения: 55
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

Re: передача в представление

Сообщение delgus »

зачем в видах это?

Код: Выделить всё

$model = Serial::find()
-> where(['alias_serial'=> YII::$app->request->get('alias_serial')])
-> one();
?>
хотя бы в контроллер перенести стоит

Свойства модели можно получить через

Код: Выделить всё

$model->property;
или

Код: Выделить всё

$model['property'];
Где property - название свойства
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

Код: Выделить всё

<?php var_dump($model);?>
это я писал для того чтобы вывести информацию но думал что выведется всё распределено...
delgus
Сообщения: 55
Зарегистрирован: 2018.01.29, 14:07
Откуда: Ярославль

Re: передача в представление

Сообщение delgus »

Почему?
http://php.net/manual/ru/function.var-dump.php

Я бы рекомендовал
1.Прочесть PHP 7 В подлиннике - Котеров Д.В., Симдянов И.В.;
2.На практике - попробовать написать свой php-движок, мануалов полно.
3. Прочесть полное руководство по Yii2, ну хотя бы для общего понимания, что происходит

Уйдет месяц-два в зависимости от занятости.

И только после этих шагов вернуться к разработке на Yii2.
arta2
Сообщения: 23
Зарегистрирован: 2018.05.14, 08:03

Re: передача в представление

Сообщение arta2 »

Был я долгое время без ноутбука - сгорело охлаждение,прошло примерно 2-3 месяца позабывал абсолютно всё,за совет я Вам благодарен можете сбросить мне ссылку где всё это прочесть и подучить???
Ответить