вопрос по ООП и mvc

Sender

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

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

> Т.е. определение нужных параметров через константы- совсем плохо?
плохо. мало того что это не ООП, дык ты хочешь хранить изменяемое значение в константе. А представь тебе надо будет вдруг поменять язык внутри одного запроса?
 

mount

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

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

> Т.е. определение нужных параметров через константы- совсем плохо?
плохо. мало того что это не ООП, дык ты хочешь хранить изменяемое значение в константе. А представь тебе надо будет вдруг поменять язык внутри одного запроса?
так как раз в процессе работы скрипта эти константы нигде не изменяются :)
 

Gas

может по одной?
Sender, не учи людей плохому:
генерировать ссылки снова с указанием языка нет необходимости, если пользователь копирует ссылку и передает другому пользователю - то у другого пользователя может быть другой язык.
я посчитал что другому пользователю текущий язык этого пользователя не нужен в большинстве случаев
язык в обязательном порядке должен быть в урле, в каком виде (поддомен, /ru/page или /page?lang=ru), это уже не важно. Если ссылка отправляется кому, то человек должен увидеть точно то же самое что и тот кто её кинул, а поисковые системы как контент на разных языках индексировать будут?
 

mount

Новичок
Sender, не учи людей плохому:



язык в обязательном порядке должен быть в урле, в каком виде (поддомен, /ru/page или /page?lang=ru), это уже не важно. Если ссылка отправляется кому, то человек должен увидеть точно то же самое что и тот кто её кинул, а поисковые системы как контент на разных языках индексировать будут?
ну я как раз так и сделал- в каждом url присутствует язык. если языка нет, то открывается язык по умолчанию
 

Sender

Новичок
Sender, не учи людей плохому:
язык в обязательном порядке должен быть в урле, в каком виде (поддомен, /ru/page или /page?lang=ru), это уже не важно. Если ссылка отправляется кому, то человек должен увидеть точно то же самое что и тот кто её кинул, а поисковые системы как контент на разных языках индексировать будут?
не спорю, может и плохому, я написал что вопрос индексации открыт. вроде боты куки не юзают, поэтому он всегда будет ходить по ссылкам с указанием языка. ибо при первом заходе пользователя, пока не нашли в куках язык - ссылки будут показываться с указанием языка


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

Beavis

Banned
У тебя есть класс, который парсит урл, и определяет какой контроллер и экшн вызвать (роутер)?
Должен быть.
Вот он должен также определять язык по заданному урлу.
Также у тебя должны быть классы Request и Response, отвечающие за обработку запроса и формирование ответа.
Вот всё это дело должно храниться в объекте класса, описывающего сущность "Запрос" (Request).
 

mount

Новичок
У тебя есть класс, который парсит урл, и определяет какой контроллер и экшн вызвать (роутер)?
Должен быть.
Вот он должен также определять язык по заданному урлу.
Также у тебя должны быть классы Request и Response, отвечающие за обработку запроса и формирование ответа.
Вот всё это дело должно храниться в объекте класса, описывающего сущность "Запрос" (Request).
да, как раз есть класс который определяет язык и отдельно класс по определению роутера. просто непонятно почему эти две переменные нельзя сразу после определения их из классов обозначить как констнанты.
 

Beavis

Banned
Потому что это не константы.
Константа - это количество минут в часе, или количество сторон в треугольнике.. а в твоем случае константа не нужна.
Тем более, раз ты говоришь о ООП, то подобные константы должны быть на уровне класса.

Представь, что тебе надо в цикле вывести урлы одной страницы на всех возможных языках.
Всё, вариант с константой в этом случае проваливается.
 

SiZE

Новичок
да, как раз есть класс который определяет язык и отдельно класс по определению роутера. просто непонятно почему эти две переменные нельзя сразу после определения их из классов обозначить как констнанты.
Можно обозначить. Просто это изврат и так никто не делает. Смотри
PHP:
// index.php
$kernel = new Kernel(); // допустим тут произошла инициализация, мы приняли и установили переменные из _POST _GET _SESSION и тд

$language = new Language();
$language->setLanguage( $kernel->request['language'] ); // Устанавливаем язык, проверяем соответствие и тд

$url = new Url();
$url->appendParam( 'language', $language->code ); // устанавливаем классу генерации URL параметр language=code, где code код языка ru en и тд

// template.php

echo '<a href="'.$url->link('content_id=1').'">link</a>';

// на выходе получаем ссылку

<a href="/index.php?language=ru&content_id=1">link</a>
 

WMix

герр M:)ller
Партнер клуба
Константа - это количество минут в часе, или количество сторон в треугольнике..
ерунда... константа это что угодно, E_ERROR, и LANG ничем не хуже
хотя конечно E_ERROR всегда постоянная...
Представь, что тебе надо в цикле вывести урлы одной страницы на всех возможных языках.
PHP:
foreach( array('ru','en') as $lang ) if( $lang == LANG ) $selected = true;
это разные вещи
 

SiZE

Новичок
ерунда... константа это что угодно, E_ERROR, и LANG ничем не хуже
Хуже тем что LANG задается динамически, ИМХО. Переменные на то и переменные. Иначе можно все в константы загонять. Их и глобальными объявлять не надо. ))))
 

WMix

герр M:)ller
Партнер клуба
да я уже тоже об этом подумал!... правильная константа это LANG_RU
 

mount

Новичок
Можно обозначить. Просто это изврат и так никто не делает. Смотри
PHP:
// index.php
$kernel = new Kernel(); // допустим тут произошла инициализация, мы приняли и установили переменные из _POST _GET _SESSION и тд

$language = new Language();
$language->setLanguage( $kernel->request['language'] ); // Устанавливаем язык, проверяем соответствие и тд

$url = new Url();
$url->appendParam( 'language', $language->code ); // устанавливаем классу генерации URL параметр language=code, где code код языка ru en и тд

// template.php

echo '<a href="'.$url->link('content_id=1').'">link</a>';

// на выходе получаем ссылку

<a href="/index.php?language=ru&content_id=1">link</a>
а ежели надо в другом скрипте, например который генерирует меню, определить ссылку на меню в зависимости от языка, то также надо обращаться к классу и через него генерировать ссылки?
 

mount

Новичок
ерунда... константа это что угодно, E_ERROR, и LANG ничем не хуже
хотя конечно E_ERROR всегда постоянная...

PHP:
foreach( array('ru','en') as $lang ) if( $lang == LANG ) $selected = true;
это разные вещи
вот у меня как раз все доступные языки в массиве :)
 

mount

Новичок
Хуже тем что LANG задается динамически, ИМХО. Переменные на то и переменные. Иначе можно все в константы загонять. Их и глобальными объявлять не надо. ))))
не совсем динамически. LANG определяется как только пользователь зашел на страницу, и остается постоянной до тех пор, пока не перешел на другую страницу. Но при переходе на другую страницу начинается новое определение router, языка и прочих параметров
 

WMix

герр M:)ller
Партнер клуба
LANG определяется как только пользователь зашел на страницу,
это правда,..
PHP:
$_GET['lang'] = 'ru';
define('LANG', $_GET['lang']);
echo LANG;
$_GET['lang'] = 'de';
echo LANG;
но какбы согласен с SiZE смысел слова константа несколько меняется... но это же не С и не java
 

mount

Новичок
это правда,..
PHP:
$_GET['lang'] = 'ru';
define('LANG', $_GET['lang']);
echo LANG;
$_GET['lang'] = 'de';
echo LANG;
но какбы согласен с SiZE смысел слова константа несколько меняется... но это же не С
вот как раз примерно это я и делаю :) т.е. в ооп-е такое допустимо?
в данной ситуации константа действительно не меняется в процессе открытия страницы
 

WMix

герр M:)ller
Партнер клуба
это НЕ OOP больше особеность PHP в OOP нужно написать так
PHP:
class Lang{
  const SELECTED = $_GET['lang'];
}

echo Lang::SELECTED;
но так у меня не работает... нужна константа!
 

WMix

герр M:)ller
Партнер клуба
В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные.
Объектно-ориентированное программирование

Если хочется настоящего ООП, что-то типа $this->getRequest()->getLanguage().
Если не очень хочется, что-то типа App::$lang
 
Сверху