Оказывается, что php72 не поддерживает выполнение скриптов напрямую для стандартной среды. Все должно пройти через пользовательский FrontController. Поэтому я создал один FrontController, который обрабатывает практически все маршруты. Ниже приведен код, который я положил в index.php. Он будет обрабатывать все указанные маршруты.
switch (@parse_url( Оказывается, что php72 не поддерживает выполнение скриптов напрямую для стандартной среды. Все должно пройти через пользовательский FrontController. Поэтому я создал один FrontController, который обрабатывает практически все маршруты. Ниже приведен код, который я положил в index.php. Он будет обрабатывать все указанные маршруты.
[110] Вы можете найти примеры для php72 для пользовательского FrontController и для различных фреймворков здесь. https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/php72
Спасибо всем за все ваши усилия. Надеюсь, это поможет таким потерянным душам, как я.
SERVER['REQUEST_URI'])['path']) {
case '/':
require 'login.php';
break;
case '/product.php';
require 'product.php';
break;
default:
break;
}
Вы можете найти примеры для php72 для пользовательского FrontController и для различных фреймворков здесь. https://github.com/GoogleCloudPlatform/php-docs-samples/tree/master/appengine/php72
Спасибо всем за все ваши усилия. Надеюсь, это поможет таким потерянным душам, как я.
Я собираюсь сделать это сам. Вот список изменений от readme:
<add namespace="System.Web.Mvc.Html"/>
Это позволяет Вам полностью заменить наши вспомогательные методы Вашим собственным. Добавленный новое перечисление HttpVerbs, которое содержит обычно используемые глаголы HTTP (ДОБИРАЮТСЯ, ОТПРАВЬТЕ, ПОМЕСТИТЕ, УДАЛИТЕ, ГОЛОВА). Также добавленный перегрузка конструктора к AcceptVerbsAttribute, который принимает перечисление. Перечисляемые значения могут быть объединены. Поскольку возможно ответить на глаголы HTTP, которые не включены в перечисление, AcceptVerbsAttribute сохраняет конструктора, который принимает массив строк в качестве параметра. Например, следующий отрывок показывает метод действия, который может ответить и на POST и ПОМЕСТИТЬ запросы.
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Put)]
public ActionResult Update() {...
}
Измененный вспомогательный метод RadioButton гарантировать, что каждая перегрузка принимает значение. Поскольку переключатели используются для определения выбора от ряда возможных значений, указывая, что значение для переключателя необходимо.
Измененный выбор метода действия. Если два метода действия соответствуют запросу, но у только одного из тех есть атрибут, который происходит из ActionMethodSelectorAttribute, который соответствует запросу, то действие вызывается. В более ранних выпусках этот сценарий привел к исключению. Например, следующие два метода действия находятся в том же контроллере:
public ActionResult Edit() {
//...
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(FormCollection form) {
//...
}
В Предварительном просмотре 5, запрос POST на действие Редактирования вызвал бы исключение, потому что два метода соответствуют запросу. В Бете приоритет дан методу, который соответствует текущему запросу через атрибут AcceptVerb. В этом примере первый метод обработает любые запросы не-POST для действия Редактирования.
Я нашел, что обновление web.config элемента пространств имен с пространствами имен из пустого проекта решило мои проблемы. Я также должен был обновить свой ModelBinders из-за интерфейсного изменения.
Это кажется тем HTML. Изображение повреждается. С предварительного просмотра 5 это было перемещено в блок фьючерсов. Я не могу вообразить почему. Так или иначе ошибка:
Method not found: 'Void System.Web.Mvc.UrlHelper..ctor(System.Web.Mvc.ViewContext)'
Лучшее решение, которое я вижу, состоит в том, чтобы заменить это:
<%=Html.Image("~/Content/Images/logo.jpg") %>
с этим:
<img src="<%=Html.ResolveUrl("~/Content/Images/logo_350.jpg")%>" />
В конструкторе ViewContext существует повреждающееся изменение. Это изменилось от:
ViewContext (контекст ControllerContext, представьте в виде строки viewName, видеоданные ViewDataDictionary, TempDataDictionary tempData),
кому:
ViewContext (контекст ControllerContext, представление IView, видеоданные ViewDataDictionary, TempDataDictionary tempData)
Это взломало мой код, потому что я использую MvcContrib. Сервисы. IEmailTemplateService, который берет ViewContext в его методе RenderMessage. Для получения IView от шаблонного имени я делаю следующее:
представление var = ViewEngines. DefaultEngine. FindView (controllerContext, viewName, пустой указатель);
Не уверенный, если это - лучшая практика, но это, кажется, работает.
О проблеме Autofac. Существует поток на autofac дискуссионной группе о потребности обновить фабрику контроллера, чтобы быть совместимым с Бета-версией платформы MVC
http://groups.google.com/group/autofac/browse_thread/thread/68aaf55581392d08
Я надеюсь, что они отправляют новую версию очень очень скоро :-)
Когда я обновил от Предварительного просмотра 5 к Бете, я испытал затруднения при определении местоположения универсальных перегрузок ActionLink. Кажется, что они не включены в основной выпуск ASP.NET MVC, но являются поставкой как "фьючерсами".
Я нашел необходимый блок (Microsoft. Сеть. Mvc) http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&ReleaseId=18459
Если Вы используете HTML. Форма от блока фьючерсов (Microsoft. Сеть. Mvc), Вы могли бы получить коллизию имени на перечислении FormMethod. Например:
Html.Form<FooController>(c => c.Bar(), FormMethod.Post, new Hash(@class => "foobar"))
Это будет жаловаться, что FormMethod является противоречивой ссылкой между Microsoft. Сеть. Mvc и System. Сеть. Mvc. Это довольно печально, потому что, по моему скромному мнению, BeginForm не предоставляет жизнеспособную возможность из-за ее отсутствия переопределения, которое использует лямбда-выражение. Ваша единственная опция состоит в том, чтобы использовать волшебные строки, которые сопротивляются рефакторингу.
Лучшее решение, кажется, состоит в том, чтобы поместить следующее в каждое представление, которое использует FormMethod:
<%@ Import Namespace="FormMethod=Microsoft.Web.Mvc.FormMethod"%>
Тьфу. Надо надеяться, это является временным. Я ожидаю, что блок фьючерсов может быть изменен для использования перечисления от Системы. Сеть. Mvc. Или очень еще лучше, надо надеяться, они перегружают BeginForm для использования выражений.
Это теперь повреждается:
<%=Html.TextBox("Name", new Hash(@class => "required"))%>
В Предварительном просмотре 5 вышеупомянутого связало бы значение ViewData. Модель. Имя к текстовому полю. Это все еще работает:
<%=Html.TextBox("Name")%>
Но если Вы хотите указать атрибуты HTML, необходимо также указать значение следующим образом:
<%=Html.TextBox("Name", ViewData.Model.Name, new Hash(@class => "required"))%>
На самом деле это не действительно безопасно. Если существует какой-либо случайный ViewData. Модель могла бы быть пустой, необходимо сделать что-то вроде этого:
<%=Html.TextBox("Name", ViewData.Model == null ? null : ViewData.Model.Name, new Hash(@class => "required"))%>
Это изменение кажется в противоречии с примечаниями Бета-версии:
"... для сокращения неоднозначности перегрузки... параметр, передаваемый по значению был изменен от объекта представить в виде строки для нескольких вспомогательных методов".
Параметр, передаваемый по значению для TextBox раньше был строкой, и это было изменено на объект. Таким образом для предотвращения неоднозначностей они должны были удалить одну перегрузку, что я использую большинство.:(
По моему скромному мнению, каждый вспомогательный метод HTML должен иметь перегрузки, которые позволяют связывать во всех случаях, не указывая значение. Иначе мы закончим с непоследовательным кодом представления, который перепутает будущее devs.
Что Will сказал выше, за исключением того, что в дополнение к удалению блоков от GAC и передобавления ссылок я также должен был запустить Бета установщик снова (помещающий правильные блоки в GAC на этот раз, хотя я просто использую ссылку на файл).
Я подозреваю, удалил ли я Предварительный просмотр 5 блоков из GAC (и я понятия не имею, как они получили там любого), прежде чем я запустил установщик, все, возможно, было в порядке. Стоящий попытки.
В маловероятном случае, что кто-либо еще там так же ненормален как я и работающий над Vista, Вы, возможно, не должны делать взламывание реестра выше для удаления старых блоков - просто выполняет gacutil от администраторской командной строки. Doh!
HTML. TextBox - значение теперь является объектом, не представляют в виде строки. Так, скрытые возможные ошибки (не во время компиляции и даже не во времени выполнения), например, я использовал этот перегруженный метод более ранний HTML. TextBox (имя строки, возразите htmlAttributes). Теперь мои attrs входят в значение текстового поля.
Да, также используйте Autofac в качестве контейнера DI.
Получите ту же проблему как этот парень
http://groups.google.com/group/autofac/browse_thread/thread/68aaf55581392d08
Никакая идея, если фиксация возможна, но наклон, не продолжается, пока это не фиксируется......
Я использую Autofac в качестве своего контейнера DI. Пустое контейнерное исключение выдается при попытке избавиться от контейнерных объектов.
Я пытаюсь узнать, как новый ModelBinder работает, насколько я вижу, что это очень отличается, но мне не удалось узнать, как это работает все же..
Мое старое было похоже:
public class GuestbookEntryBinder : IModelBinder
{
#region IModelBinder Members
public object GetValue(ControllerContext controllerContext, string modelName, Type modelType, ModelStateDictionary modelState)
{
if (modelType == typeof(GuestbookEntry))
{
return new GuestbookEntry
{
Name = controllerContext.HttpContext.Request.Form["name"] ?? "",
Website = controllerContext.HttpContext.Request.Form["website"] ?? "",
Message = controllerContext.HttpContext.Request.Form["message"] ?? "",
};
}
return null;
}
#endregion
}
Новый смотрит как:
#region IModelBinder Members
public ModelBinderResult BindModel(ModelBindingContext bindingContext)
{
throw new NotImplementedException();
}
#endregion
Какие-либо подсказки?
Проблема с AutoFac была теперь разрешена в Пересмотре 454 из кодовой базы AutoFac http://code.google.com/p/autofac/issues/detail?id=86&can=1
Игнорируйте это... Я - проигравший - это - Microsoft ASP.net в программных файлах... не просто ASP.net
Возможно, это должно быть вторым вопросом, но я думаю, сохраняя все это в одном месте, мог бы помочь.
Не запуская Бета установщика ничто не заканчивает тем, что изменилось на моем ПК. Я не вижу папку в папке Program Files... никакие блоки не добавляются к GAC... даже установщик добирается до последнего шага и затем зависает в течение приблизительно 10 минут или около этого.
Я удалил и переустановил пару раз теперь без любой удачи.
Кто-либо имеющий подобную проблему?
Я испытал ту же проблему, как Будет и должен был сделать подобные вещи как его, включая копирование dlls к папке мусорного ведра.
Теперь вещи работают во внутреннем сервере vs.net, но заставляют IIS7 отказывать.
Хорошо, оказывается, что одна из основных проблем - то, что я пропустил шаг для обновления блоков компиляции в web.config:
<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
После борьбы с этим в течение большей части дня я полагал, что отправлю свое решение здесь. Возможно, это - нормальное поведение Visual Studio, но я никогда не замечал его прежде...
На моем существующем проекте я на самом деле должен был вручную переместить Бета файлы в папку Bin. По любой причине, просто просмотрев к нему с Добавляют, что Ссылка не работала...
Все, что я должен был сделать, было обновить блоки от
Бета %ProgramFiles %\Microsoft ASP.NET \ASP.NET MVC
Также получите новую Microsoft. Сеть. MVC от codeplex
обновить мой блок фьючерсов также.
добавьте в 2 строках к web.config
Этот к <assemblies>
Раздел:
<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Этот к <namespaces>
раздел:
<add namespace="System.Web.Mvc.Html"/>
Затем я должен был обновить весь <%using (Html.Form())
кому: <%using (Html.BeginForm())
На одном файле кода я должен был добавить System.Web.Mvc.Html;
пространство имен
Мой материал основан на Витрине Rob Conery MVC, таким образом, любой использующий, который должен смочь следовать за вышеупомянутым.
Надежда это помогает кому-то там.
Номер выпуска один: Желтый экран смерти.
CS0234: The type or namespace name 'Mvc' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)
Решение: Я удалил все ссылки в своем проекте и повторно добавил их, указав на блоки в программе files\asp.net\asp.net mvc beta\assemblies, но это не решило проблему.
У меня был system.web.mvc dll в gac (никакая идея как). Попробованный для удаления его. Неспособный к; сборка требуется одним или несколькими приложениями. Должен был найти блок, как описано здесь и удалить ключ реестра. Я затем смог удалить версию gac system.web.mvc.
Это ВСЕ ЕЩЕ не решило проблему. У меня были к переADD ссылки СНОВА. Теперь его работа.
Только быть ясным!!! Бета блоки были отброшены под Программными файлами, в то время как более старая версия Системы. Сеть. Mvc был в GAC.