Я думаю, что вам не хватает нескольких элементов или, возможно, вы захотите немного больше изучить, как соединить различные части. Ваш основной запрос не особенно относится к предмету Laravel:
Я хочу остаться в фактическом виде и отображать ответ в виде предупреждения
blockquote>Суть это не то, что Laravel «выводит из коробки», это не вопрос Laravel, а то, как я могу асинхронно обновлять свою страницу. Для этого вам лучше всего использовать ajax-запрос с последующим предупреждением javascript / jQuery.
Я мог бы сделать что-то вроде этого:
$('#submitButton').on('click', function (e) { e.preventDefault(); // Want to stay on the page, not go through normal form // Might be easier to make this a NON submit button - then we can use the rest below and not have to js submit() // Grab any extra info via data. var item_type = $(this).data('item-type'); var name = $(this).val(); $.ajax({ url: "{{url('user/create/')}}", type: "POST", data: { item_type: item_type, name: name }, success: function (name) { alert(message); // Or, if you want a better looking alert, you can use a library like SWAL: swal("Success!", "New user created with a name of: "+name, "success"); }, error: function () { swal("Error", "Unable to bring up the dialog.", "error"); } }); });
Вам нужно будет обработать ajax-данные в вашем контроллере и отправить обратно только имя в операторе возврата метода контроллера.
Если вы хотите изменить форму выше и не делать это с помощью оповещения, используйте jQuery в функции успеха, чтобы внести изменения (например,
$("#name").text(name);
или что-то подобное.
Некоторые общие советы:
less stacktrace.log
на Linux)... однажды в Вашем средстве просмотра, ищите .groovy и .gsp..., который обычно приносит Вам к тому, о чем Вы на самом деле заботитесь. ?showSource
в строке запроса, т.е. http://localhost:8080/myProject/myController/myAction?showSource
... это показывает скомпилированный источник GSP, и все номера строки GSP в stacktrace относятся к скомпилированному GSP, не, фактический источник GSP Пример:
try {
if(!someDomainObject.save()) {
throw new Exception ("Save failed")
}
} catch(Exception e) {
println e.toString()
// This will at least tell you what is wrong with
// the instance you are trying to save
someDomainObject.errors.allErrors.each {error ->
println error.toString()
}
}
Кроме того, многое из него просто сводится к распознаванию stacktraces и сообщениям об ошибках... много времени, Grails невероятно бесполезен в сообщениях об ошибках, которые это дает Вам, но можно учиться распознавать шаблоны, как следующее:
grails clean
или grails upgrade
... для предотвращения этих проблем, я всегда использую следование командной строки для выполнения чаш Грааля: grails clean; yes | grails upgrade; grails run-app
lib/
, удостоверьтесь, что Ваши полномочия корректны и в DataSource.groovy
и в базе данных для имени пользователя, пароля и хоста, и удостоверяются, что Вы знаете входы и выходы версии своего коннектора (т.е. mysql версия 5.1. X коннектора имеет странную проблему с псевдонимами, которые могут потребовать, чтобы Вы установили useOldAliasMetadataBehavior=true
на URL в [1 110]) И так далее. Существует много шаблонов, чтобы учиться распознавать.
Для добавления к предложению Chris King на сохранении я записал допускающее повторное использование закрытие:
Closure saveClosure = { domainObj ->
if(domainObj.save())
println "Domain Object $domainObj Saved"
else
{
println "Errors Found During Save of $domainObj!"
println domainObj.errors.allErrors.each {
println it.defaultMessage
}
}
}
Затем можно просто использовать его везде, и это будет заботиться о сообщении об ошибке:
def book = new Book(authorName:"Mark Twain")
saveClosure(book)
Кроме того, я использую плагин отладки - он позволяет дополнительный вход, и я добавил тег к нижней части моего основного - который высказывает мне мнение всех переменных на сессии / запрос.
плагин Входа Времени выполнения позволяет позволять регистрироваться во времени выполнения.
При записи этого ответа, плагин P6SPY также кажется, что это могло быть полезно - он регистрирует все операторы, которые приложение делает против базы данных путем действия как прокси.
Консоль Grails также полезна. Я использую его для интерактивного ввода по абсолютному адресу вокруг и эксперимент с некоторым кодом, который также пригождается во время отладки.
И конечно, способность ступить через Отладчик сладка. Я переключился на ИДЕЮ IntelliJ, так как она имеет лучший Grails / поддержка Groovy.
Я когда-то спросил опытного отличного разработчика о том, как он эффективно отладил свои приложения. Его ответ:
я пишу тесты!
И у него есть очень положительная сторона: Если Ваш код будет иметь достаточную единицу и интеграционные тесты, то Вы ничего почти никогда не должны будете отлаживать. Плюс Вы добираются, чтобы сказать самодовольные подобные вещи Вашим поддерживающим разработчикам...
Для Grails:
Вот некоторые приемы, собранные groovymag от людей Grails в Твиттере:
Для простых приложений я использую println оператор. Это - очень очень легкий прием. Поскольку сложные приложения используют режим отладки в intellij идее.
Я не уверен, можно ли это сделать из коробки, но в веб-приложениях я нахожу полезным иметь подсистему "кто я?" в различных файлах просмотра.
Идея состоит в том, чтобы послать сообщение в HTML, чтобы идентифицировать фрагмент. Это особенно верно, когда я впервые сталкиваюсь с приложением.
В Grails я делаю это с помощью пользовательского тега. Например, рассмотрим list.gsp для Student:
<g:debug msg="student list" />
Here is the code:
class MiscTagLib {
def debug = { map ->
if (grailsApplication.config.grails.views.debug.mode == true) {
def msg = map['msg']
out << "<h2>${msg}</h2><br/>"
}
}
}
The key is that you can leave those tags in there, if желательно, так как они появляются только при включённом режиме в Config.groovy:
grails.views.debug.mode=true