Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
5 / 1 / 1
Регистрация: 20.08.2013
Сообщений: 18

Мультиязычность в MVC

10.04.2016, 19:39. Показов 2986. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, изучаю MVC и для практики делаю свой микро фреймворк, но столкнулся с проблемой. Как обычно сперва делаем index.php единой точкой входа и устанавливаем начальные настройки.

Далее в bootstrap.php загружаем классы и вызываем роутер
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
spl_autoload_register('my_autoloader');
 
function my_autoloader($class){
  
  if(file_exists(ROOT.'application/core/'.$class.'.php')){
    require_once ROOT.'application/core/'.$class.'.php';
  }
  else{
    exit();
  }
  
}
 
Route::start();


Содержимое класса Route
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class Route{
  
    public static function start(){
        // контроллер и метод (экшен) по умолчанию
        $controller_name = 'Main';
        $action_name = 'Index';
        
        $routes = explode('/', trim($_SERVER['REQUEST_URI'],'/'));
 
        // получаем имя контроллера и экшена
        if (isset($routes[0]) && !empty($routes[0]) ){
      if(isset($routes[1]) && !empty($routes[1])){
        $controller_name = array_shift($routes);
        $action_name = array_shift($routes);
      }
      else{
        $controller_name = array_shift($routes);
      }
        }
 
        // добавляем префиксы
        $model_name = 'Model_'.ucfirst($controller_name);
        $controller_name = 'Controller_'.ucfirst($controller_name);
        $action_name = 'Action_'.ucfirst($action_name);
 
        // Подключаем файл с классом модели (файла модели может и не быть)
 
        if(file_exists(ROOT.'application/models/'.$model_name.'.php')){
            require_once ROOT.'application/models/'.$model_name.'.php';
        }
    
        // Подключаем файл с классом контроллера
        if(file_exists(ROOT.'application/controllers/'.$controller_name.'.php')){
            require_once ROOT.'application/controllers/'.$controller_name.'.php';
        }
        else{
            //
        }
    
        // создаем контроллер
        $controller = new $controller_name;
        
        if(method_exists($controller, $action_name)){
      // вызываем действие контроллера и передаем массив параметров если они есть
      if(!empty($routes)){
        $parameters = $routes;
        $result = call_user_func_array(array($controller, $action_name), array($parameters));
      }
      else{
        $controller->$action_name();
      }
            
        }
        else{
            //
        }
    
    }
  
}


URL получается такого вида: example.com/контроллер/метод/параметр1/параметр2/...

Проблема выходит при разработке мультиязычного сайта. Например при переходе на английскую версию сайта example.com/eng в роутере eng воспринимается как контроллер. Сперва думал написать проверку значения $routes[0], но тогда получается какой-то костыль. Просьба указать на ошибку. Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2016, 19:39
Ответы с готовыми решениями:

Как широко применяется MVC в программировании на Java? Стоит ли изучать MVC?
Здравствуйте. Начинающий java-программист. Буквально недавно только закончил изучать Core. Теперь готовлюсь к собеседованиям и своей первой...

связь MVC и MVVM. Трудно ли освоить mvc параллельно с изучением ASP.NET
Здравствуйте, начал изучать ASP.NET для курсовой работы. Начал читать &quot;Мак-Дональд М., Фримен А., Шпушта М. Microsoft ASP.NET 4 с примерами...

ASP.net MVC против MVC обычного
Здраствуйте, читая книгу &quot;Сандерсон С - ASP.NET MVC3 Framework с примерами на C# для профессионалов&quot; я заметил что описание...

6
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
10.04.2016, 19:56
А зачем язык через url передавать? я бы по умолчанию показывал один язык, а другие языки пользователь пусть сам выбирает. Выбранный язык хранил бы в сессии/куки/бд...
Цитата Сообщение от Manager87 Посмотреть сообщение
URL получается такого вида: example.com/контроллер/метод/параметр1/параметр2/...
Имхо такие url не удобны. Лучше делать их независимыми. Т.е. отдельно указывать связь между url и методом, который должны выполниться.
0
5 / 1 / 1
Регистрация: 20.08.2013
Сообщений: 18
10.04.2016, 20:22  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
А зачем язык через url передавать? я бы по умолчанию показывал один язык, а другие языки пользователь пусть сам выбирает. Выбранный язык хранил бы в сессии/куки/бд...

Имхо такие url не удобны. Лучше делать их независимыми. Т.е. отдельно указывать связь между url и методом, который должны выполниться.
Да можно и в сессиях хранить, но все таки хотелось бы найти решение передачи языка через url. Насчет выделенного, если не трудно, можете показать на примере?
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
10.04.2016, 20:46
if (isset($routes[0]) && !empty($routes[0])
достаточно: !empty($routes[0]), поскольку он включает в себя isset

Цитата Сообщение от Manager87 Посмотреть сообщение
хотелось бы найти решение передачи языка через url
&lang=1

example.com/контроллер/метод/параметр1/параметр2/
вот это хрень полная, потому что несколько методов = ад и израиль
а когда вы это осознаете, будет уже поздно, переделывать придётся весь проект
ещё и контроллер там указывать, чтобы потом его название юзать внутри скрипта

кого вы пытаетесь запутать? себя? клиентов?
потому что ботам совсем по-барабану на вашу "красоту"
точнее им таки привычнее &
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
10.04.2016, 21:02
Manager87, в роутере для каждой url-маски в отдельных полях прописываете имя контроллера и т.п. и/или прямо в маске указываете, где контроллер, где параметры и т.п.: /{language}/{controller}

Цитата Сообщение от полудух Посмотреть сообщение
вот это хрень полная, потому что несколько методов = ад
1
5 / 1 / 1
Регистрация: 20.08.2013
Сообщений: 18
10.04.2016, 21:07  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Manager87, в роутере для каждой url-маски в отдельных полях прописываете имя контроллера и т.п. и/или прямо в маске указываете, где контроллер, где параметры и т.п.: /{language}/{controller}
Спасибо, попробуем.
0
14 / 50 / 3
Регистрация: 26.12.2009
Сообщений: 406
22.04.2016, 16:06
А при чем тут MVC?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2016, 16:06
Помогаю со студенческими работами здесь

Мультиязычность
У меня проблема такая! Есть код, но я его не могу никак оптимизировать(код не мною создан) мне нужно что бы язык менялся автоматически при...

Мультиязычность
Кто с джумлой в кентах, покажите где я не прав. Вот мой файл templateDetails.xml &lt;?xml version=&quot;1.0&quot;...

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

Мультиязычность
Добрый день дорогие форумчане, прошу помогите мне сделать мультиязычность на сайте, никак не могу придумать алгоритм, то есть логику,...

Мультиязычность
По задумке весь контент изначально на странице; а менюшки, навигация, кнопки и др. мелочь в зависимости от предпочтительного для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru