Новичок!Осознание или правильный подход написания кода.

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

Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

Всем привет.
Если кому не сложно,плиз поясните мне вариант общения в yii допустим для такой микро задачи

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

Вот очень интересен сам принцип,как это должно быть написано ПРАВИЛЬНО,чтоб не выдумывать велосипед...

Понятие php,mvc есть..просто читаю мануал...примеры... но как-то не пойму...везде все по разному пишут.
Извиняюсь за возможный очередной глупый вопрос от новичка!
Всем заранее спасибо!!!!
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение sluchainiyznak »

тут я вижу 2 варианта рзвития событий:
1. Вариант с толстой моделью - логика происходит в модели
2. Вариант с толстым контроллером - логика происходит в экшне контроллера

з.ы.: моё мнение - 1 вариант
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

sluchainiyznak писал(а):тут я вижу 2 варианта рзвития событий:
1. Вариант с толстой моделью - логика происходит в модели
2. Вариант с толстым контроллером - логика происходит в экшне контроллера


То есть при входе на хоум,весь скрипт основной должен быть через экшен?

Исправьте плиз меня если что:
1)Когда заходишь на индекс, будет вызываться экшен на (идндексном) контроллере...
2)Либо реализуем все в тут же,либо вызываем из модели весь функционал и выводим инфу на вывод..
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение sluchainiyznak »

1. Есть контроллер с кучей экшнов
2. При переходе на экшн index(в вашем случае) есть 2 варианта развития событий:
2а. Вся логика проходит непосредственно в экшне
2б. Создается экземпляр модели, в модель передаются какие то данные, модель производит работу с этими данными и возвращает результат работы в экшн
3. Экшн отдает данные о результатах работы в представление
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

sluchainiyznak писал(а):1. Есть контроллер с кучей экшнов
2. При переходе на экшн index(в вашем случае) есть 2 варианта развития событий:
2а. Вся логика проходит непосредственно в экшне
2б. Создается экземпляр модели, в модель передаются какие то данные, модель производит работу с этими данными и возвращает результат работы в экшн
3. Экшн отдает данные о результатах работы в представление
Спасибо большое, за ваш быстрый ответ!
Понял логику,что как.
Осталось реализовать,ха правда еще не придумал,как но то такое :)
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

sluchainiyznak писал(а):1. Есть контроллер с кучей экшнов
2. При переходе на экшн index(в вашем случае) есть 2 варианта развития событий:
2а. Вся логика проходит непосредственно в экшне
2б. Создается экземпляр модели, в модель передаются какие то данные, модель производит работу с этими данными и возвращает результат работы в экшн
3. Экшн отдает данные о результатах работы в представление

А вот такой вопрос.
Я создал через gii модель.. реализовал там часть работы.
Мне нужно сохранить данные в разные табилцы,как мне реализовать это?

При генерации шаблона указал одну таблицу и в модели только одна таблица,можно как-то добавить еще таблицу?
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »


Есть такой вопрос,при входе на индекс сайта нужно перекидывать на Login..
Так получилось сделать с другими контроллерами,а SiteController получается - На этой странице обнаружена циклическая переадресация -

Как обычно выводят из цикла подобную ситуацию?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение slavcodev »

Настраивается фильтр AccessControl чтоб не пускал гостя на все действия кроме login
Жду Yii 3!
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

slavcodev писал(а):Настраивается фильтр AccessControl чтоб не пускал гостя на все действия кроме login
Я вроде это делаю,на SiteController добавил

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

/**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
        );
    }
    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index'),
                'users'=>array('@'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение slavcodev »

login - у тебя закрыт, вот и зациклено, и разрешен index, хотя вроде ты написал что он должен быть закрыт.
Жду Yii 3!
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

slavcodev писал(а):login - у тебя закрыт, вот и зациклено, и разрешен index, хотя вроде ты написал что он должен быть закрыт.
Осознал,спасибо!

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

public function accessRules()
    {
        return array(
            array('allow',  // allow for aut users to perform 'index'  action
                'actions'=>array('index'),
                'users'=>array('@'),
            ),
            array('allow',  // allow all users to perform 'login' action
                'actions'=>array('login'),
                'users'=>array('*'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

slavcodev писал(а):login - у тебя закрыт, вот и зациклено, и разрешен index, хотя вроде ты написал что он должен быть закрыт.

Еще вопрос появился по ходу :)

Вот создал я форму регистрации юзеров..

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

class UserController extends Controller
{
    public function actionIndex()
    {
        $this->render('index');
        //'view',array('model'=>$this->loadModel($id),'current'=>$arraycurrentexp,
    }
    
    // Действие регистрации
    public function actionSignup()
    {
        // Создать модель и указать ей, что используется сценарий регистрации
        $user = new User(User::SCENARIO_SIGNUP);

        // Если пришли данные для сохранения
        if(isset($_POST['User']))
        {
            // Безопасное присваивание значений атрибутам
            $user->attributes = $_POST['User'];

            // Проверка данных
            if($user->validate())
            {
                // Сохранить полученные данные
                // false нужен для того, чтобы не производить повторную проверку
                $user->save(false);

                // Перенаправить на список зарегестрированных пользователей
                $this->redirect($this->createUrl('user/'));
            }
        }

        // Вывести форму
        $this->render('form_signup', array('form'=>$user));
    }
} 
Как и от куда правильно вызывать этот actionSignup?
Если я нажал на регистрацию в менюхе

Так как логин,логаут находятся в SiteControllere,значит туда нужно и засовывать вызов регистрации..

Если возможно,простой пример,как это делается,плиз.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение slavcodev »

Не понял вопрос. Твоя форма должна посылать запрос на это действие
<form action="signup">
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение slavcodev »

Пробегись (или изучи) демо-блог, там работа с формами рассматривается. Прочти рецепты. Такие вопросы должны отпасть.
Жду Yii 3!
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

slavcodev писал(а):Пробегись (или изучи) демо-блог, там работа с формами рассматривается. Прочти рецепты. Такие вопросы должны отпасть.
Спасибо,разобрался.

А вот вопрос появился по поводу отправки письма об успешной регистрации пользователя..есть какой-то простой образец..?
по мимо этого: http://www.yiiframework.com/extension/email/
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

slavcodev писал(а):Пробегись (или изучи) демо-блог, там работа с формами рассматривается. Прочти рецепты. Такие вопросы должны отпасть.

У меня такой вопрос,я хочу вывести список значений в дроп даун лист с двух или трех полей,как это можно реализовать вообще?
Получилось только одно поле выводить

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

<td><?php $list = CHtml::listData($flights,
               'idflights','departure');
             echo CHtml::dropDownList('departure','Выберите от куда', $list); ?>
Решил это дело только с помощью перебора массива и конкатенации ..
Егор
Сообщения: 27
Зарегистрирован: 2014.04.25, 10:23

Re: Новичок!Осознание или правильный подход написания кода.

Сообщение Егор »

Такой вопрос.. Каким образом выводить данные из другой таблицы через _view

Есть две таблицы,которые нужно вывести совмещенные данные вместе.

С одной вывел,а не пойму,как достать данные из _view
class Orders и Passenger

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

/* @var $this OrdersController */
/* @var $data Orders */
<b><?php echo CHtml::encode($data->getAttributeLabel('seat')); ?>:</b>
    <?php echo CHtml::encode($data->seat); ?>// Здесь Orders данные видны
    <br />

    <b><?php echo CHtml::encode($data->getAttributeLabel('passenger.telephone')); ?>:</b>
    <?php //echo CHtml::encode($data->lephone); ?> // Здесь нужен результат с Passenger
    <br />
Релейшн прописал

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

public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array('passenger'=>array(self::BELONGS_TO, 'Passenger', 'id_passenger'),
        );
    } 
Видит атрибуты...а как добраться до значений не знаю
Ответить