Symfony 1.4 передача переменных между шаблонами и действиями - PullRequest
2 голосов
/ 02 сентября 2011

symfony 1.4 передача переменных между шаблонами и действиями

У меня есть индексная страница, которая включает в себя вызов ряда частичных значений с помощью оператора switch; и это работает. Теперь мне нужно ограничить доступ к частичной зависимости от типа пользователя; Более того, я считаю, что мой оператор switch должен быть в классе действий в соответствии с MVC, но я не могу заставить это работать. Это может быть лучше объяснено на примере:

Вот моя файловая структура для модуля панели инструментов:

..dashboard
    ..actions
    ..config
    ..templates
        _admins.php
        _employers.php
        _employees.php
        _guest.php
        indexSuccess.php

Вот мой текущий шаблон indexSuccess (который в настоящее время работает ... но без ограничения доступа, если тип зарегистрированного пользователя не соответствует типу страницы):

$type = sfContext::getInstance()->getUser()->getGuardUser()->getProfile()->getType()->getName();
switch($type)
{
case ('Employer'): 
    include_partial('dashboard/employers');
    $page_user_type = "employer";  //this example line currently does not exist, it's for example purpose below
    $break;
case ('Employee'):
    include_partial('dashboard/employees');
    break;
case ('Administrator'):
    include_partial('dashboard/admins');
    break;
default: include_partial('dashboard/guest');
    break;
}

Вот мой класс действий (в настоящее время пустой):

public function executeIndex(sfWebRequest $request)
{

}

По сути, мне нужен оператор switch, перенесенный в действие (я думаю), и добавленный метод forward404Unless (), который выполняет следующее:

$logged_user = sfContext::getInstance()->getUser()->getGuardUser()->getId(); 
$this->forward404Unless($logged_user == $page_user_type);   //where the $page_user_type variable is retrieved by the switch statement in the example line above.  

Я пытался использовать getAttribute () и setAttribute () безуспешно ... и я бы не стал делиться попытками из-за смущения. Просто новичок здесь ...

Любая помощь будет оценена. Заранее спасибо.

UPDATE:

Вот дополнительная информация о коммутаторе и различных частях:

Коммутатор отображает другую часть в зависимости от типа пользователя. Чего он не делает, так это не дает другим зарегистрированным пользователям другого типа доступа ко всем остальным частям ... что в моем дизайне очень плохо. Например: вошедшие в систему пользователи типа «работодатель» могут не просматривать частичное типа «сотрудник». В настоящее время они могут (явно введя другой URL-адрес), даже если они перенаправляются на соответствующую страницу во время действия index.

Страница 404 должна вызываться, когда пользователь неправильного типа пытается получить доступ к другой части, явно введя URL-адрес. Вот почему я пытался добавить переменную в состояние переключателя при вызове соответствующего партиала, а затем передать эту переменную в действие индекса, которое затем оценило бы ее и либо разрешило рендеринг партиала, либо если user_type и частичный_тип не сделали этого. совпадение -> перейти на страницу 404. Есть смысл? Надеюсь, я объяснил это достаточно подробно. Я уверен, что есть более простой способ ... Я просто недостаточно обучен, чтобы знать, что это может быть.

Я действительно ценю ваш ответ и пытаюсь решить мою проблему.

Ответы [ 3 ]

0 голосов
/ 08 сентября 2011

Хорошо, я понял это самостоятельно. Вот что я сделал, чтобы получить желаемый результат:

  1. Изменен маршрут, так что он не может быть явно набран и доступен. Проблема решена.
0 голосов
/ 14 сентября 2011

Вам следует поиграть с системой учетных данных, чтобы заблокировать неавторизованному пользователю доступ к ресурсу.«Тип» вашего пользователя может стать именем учетных данных.Тогда вам просто нужно создать security.yml, чтобы справиться с этим.

0 голосов
/ 02 сентября 2011

У меня небольшие проблемы с пониманием, когда должно произойти 404. Это справится с этим?

Действие:

public function executeIndex(sfWebRequest $request)
{
  $this->profileType = $this->getUser()->getGuardUser()->getProfile()->getType()->getName();
  $this->forward404Unless(in_array($this->profileType, array('type1', 'type2')), 'Invalid profile type');
}

Вполне приемлемо иметь switch выражение в виде, но если это полное значение indexSuccess.php, вы можете вместо этого позвонить sfAction::setTemplate.

...