Yii2 и частичный Angularjs

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
mutogen
Сообщения: 52
Зарегистрирован: 2013.10.16, 15:39

Yii2 и частичный Angularjs

Сообщение mutogen »

Добрый день.
Столкнулся с проблемой. Есть такая ситуация:
1) Часть приложения - это обычный себе Yii2-проект, контроллеры, вьюхи и т.д.
2) Другая, малая часть - это по сути один контроллер, который начинается от actionIndex и далее работает на Angular.

Все вроде бы ничего, Angular часть работает в режиме html5 и для пользователя все выглядит как обычно в плане url'ов.
Но есть проблема с переходами по ссылкам копипастом. Есть очень большая вероятность, что это будет использоваться часто. Собственно проблема в том, что переход по таким ссылкам дает 404-ую ошибку. Роуты в angular настроены так:

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

.config(function($routeProvider, $locationProvider) {
    base = '/construct/';
    $routeProvider.when(base+':className', {
      templateUrl: '/construct/builder',
      controller: 'BuilderCtrl',
      reloadOnSearch: false
    }).otherwise({
      templateUrl: '/construct/heroes',
      controller: 'HeroesCtrl'
    });

    $locationProvider.html5Mode(true);
  });
В первом случае, когда путь выглядит как /construct/something по прямой ссылке получается 404-ая.

В мануалах пишут, что нужно настроить rewrite особым образом под корень Angular-приложения, но попытки совместить это с основным правилом ни к чему не приводят.

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

RewriteEngine on

# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Otherwise forward the request to index.php
RewriteRule . index.php
Аватара пользователя
norvele
Сообщения: 26
Зарегистрирован: 2013.12.05, 06:26
Откуда: Новосибирск

Re: Yii2 и частичный Angularjs

Сообщение norvele »

На сколько я знаю angular может работать с "#!", т.е. ангуляровская компетенция - хэш. И вроде даже гугл умеет это индексировать. Как выход, если не принципиально, сделать хэшем везде, даже где есть хистори апи.
Мануалы правильно говорят, можно решить с помощью htaccess, но в этом плане не помогу тут..
PS можно покопаться в urlManager и попробовать немножко переопределить парс урла
rtwent
Сообщения: 2
Зарегистрирован: 2014.04.25, 17:45

Re: Yii2 и частичный Angularjs

Сообщение rtwent »

Столкнулся с темже. С опозданием мое решение.
Тег base должен содержать ссылку на то, где инициализируется angular приложение.
В твоем случае: /construct/
В ConstructController::actionIndex() ты инициализируешь Angular.
Дальше в angular роутинге в otherwise указываешь точку входа в ангуляр (с дефолтными параметрами). В любом приложении есть точка входа (у меня например просмотр входящих сообщений).
Дальше ангуляр всю работу сделает сам.
А насчет
может работать с "#!", т.е. ангуляровская компетенция - хэш
На оф. сайте они называют это oldschool. :lol:
Ответить