Страница 1 из 1

Классы в модели или это безобразие.

Добавлено: 2019.02.23, 23:02
Vladbara705
Здравствуйте.
Никак не могу найти ответ на свой вопрос.
Допустим, есть задание :
Определить по введенным в поле цифрам через запятую геометрическая это прогрессия или нет.

Дак вот, в модели мне нужно следовать канонам ООП (создание классов, которые отвечают каждый за свое) или же умещать все а разные методы под одним классом, который наследован от model?
Нужно ли в моделе вообще создавать классы или это делается где то в другом месте?
Прошу натолкнуть на правильный путь.

Re: Классы в модели или это безобразие.

Добавлено: 2019.02.23, 23:36
samdark
Следовать ООП.

Re: Классы в модели или это безобразие.

Добавлено: 2019.02.24, 10:05
Vladbara705
Это значит, что другие классы должны работать (вызываться) классом, который наследуется от model? А класс наследуемый от model в свою очередь работает с контроллером. Правильно?

И прошу объяснить в каком случае используется репозиторий?

Re: Классы в модели или это безобразие.

Добавлено: 2019.02.24, 11:28
anton_z

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


class ProgressionInput 
{
    /**
     * @var string
     */
    private $input;

    public function __construct(string $input)
    {
         $this->input = $input;
    }

    public function isProgression() : bool
    {
        //здесь будет код, который определяет, прогрессия это или нет, если прогессия return true, нет return false
    } 


}

Далее этот класс можно использовать в классе формы (или где угодно, зависит от задачи), для определения, является ли строка $input прогрессией.

Re: Классы в модели или это безобразие.

Добавлено: 2019.02.24, 15:56
Vladbara705
Ничего не понимаю))
Вот есть у нас например модель:

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

<?php
namespace app\models;
use Yii;
use yii\base\Model;
class Geometry extends Model
{
    public $progression;
    public function rules()
    {
        return [
            [['progression'], 'required','message' => 'Заполните поле'],
            [['progression'],  'match', 'pattern' => '~^(?:|(?:\d+\,*)*\d+)$~', 'message' => 'Поле может содержать только цифры и запятые']
        ];
    }
}
Могу ли я сделать так:

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

<?php
namespace app\models;
use Yii;
use yii\base\Model;
class Geometry extends Model
{
    public $progression;
    public function rules()
    {
        return [
            [['progression'], 'required','message' => 'Заполните поле'],
            [['progression'],  'match', 'pattern' => '~^(?:|(?:\d+\,*)*\d+)$~', 'message' => 'Поле может содержать только цифры и запятые']
        ];
    }
    
    public function GeometryFinish()
    {
    	$GeometryDefine= new GeometryDefine();
    	return $GeometryDefine->GeometryDefine();
    }
}

class GeometryArray
{
	public function GeometryArray()
	{
		//здесь код, который будет разбивать текст из поле ввода на массив
	}
}

class GeometryDefine
{
	public function GeometryDefine()
	{
		//здесь код, который будет определять прогрессия это или нет
	}
	
	// здесь, например, другие нужные методы
}
То есть, в модели я создал несколько других классов, которые отвечают каждый за свое.
Затем, в классе Geometry, который наследуется от model я буду передавать все в контроллер.
Прошу не смотреть на правильность кода, писал здесь, в редакторе.

Вопрос в том, можно ли в модели создавать другие классы и бизнес-логику хранить там ?
Или это делается в другом месте ?

Re: Классы в модели или это безобразие.

Добавлено: 2019.02.27, 14:29
anton_z
Vladbara705 писал(а): 2019.02.24, 15:56 Вопрос в том, можно ли в модели создавать другие классы и бизнес-логику хранить там ?
Или это делается в другом месте ?
Конечно, можете. Главное чтобы было тестируемо.