controller - Symfony2:المسار الكامل للعمل / الطريق في وحدة تحكم




(4)

حاول القيام بما يلي:

$url = $this->generateUrl('your_route_name');

أنا بحاجة إلى المسار الكامل لعمل داخل وحدة تحكم بلدي، لإرسالها عبر البريد الإلكتروني. كيف يمكنني تحقيق شيء مثل {{ path('_route') }} من داخل وحدة التحكم الخاصة بي ولكن المسار الكامل؟


جواب خوان هو الصحيح إذا كنت تريد المسار المحلي. المسار المطلق - الذي من المفيد أن يتم إرساله عبر البريد الإلكتروني - يحتاج إلى معلمات إضافية (ق):

$url = $this->generateUrl('your_route_name', array(), true);

تشير المعلمة الثالثة إلى أن المسار المطلق سيتم إنشاؤه.

إذا كنت ترغب في استخدام عنوان ورل هذا في طريقة العرض الخاصة بك فقط إضافة $url إلى مجموعة الاستجابة في العمل الخاص بك واستخدامها.


سيمفوني 3+

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

$this->generateUrl('your_route_name', array('/* your route parameters */'), UrlGeneratorInterface::ABSOLUTE_URL);

بالنسبة إلى MVC4 ، باستخدام Enum ( UserRoles ) UserRoles ، يمكنني استخدام AuthorizeAttribute مخصص.

في عملي الذي يتم التحكم فيه ، أقوم بما يلي:

[CustomAuthorize(UserRoles.Admin, UserRoles.User)]
public ActionResult ChangePassword()
{
    return View();
}

وأستخدم AuthorizeAttribute مثل:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class CustomAuthorize : AuthorizeAttribute
{
    private string[] UserProfilesRequired { get; set; }

    public CustomAuthorize(params object[] userProfilesRequired)
    {
        if (userProfilesRequired.Any(p => p.GetType().BaseType != typeof(Enum)))
            throw new ArgumentException("userProfilesRequired");

        this.UserProfilesRequired = userProfilesRequired.Select(p => Enum.GetName(p.GetType(), p)).ToArray();
    }

    public override void OnAuthorization(AuthorizationContext context)
    {
        bool authorized = false;

        foreach (var role in this.UserProfilesRequired)
            if (HttpContext.Current.User.IsInRole(role))
            {
                authorized = true;
                break;
            }

        if (!authorized)
        {
            var url = new UrlHelper(context.RequestContext);
            var logonUrl = url.Action("Http", "Error", new { Id = 401, Area = "" });
            context.Result = new RedirectResult(logonUrl);

            return;
        }
    }
}

هذا جزء من FNHMVC modifed بواسطة Fabricio Martínez Tamayo https://github.com/fabriciomrtnz/FNHMVC/







symfony controller