Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте.
Я передаю в контроллер через ajax скрипт 2 числа. Контроллер их считает и через ajax возвращает на страницу. Теперь появилась задача проверить эти числа на правила (rules). Когда валидатор выдает fails (пустое поле, например), то я делаю редирект (у меня одна единственная страница), передаю во вьюху $validator, чтобы вьюха вывела мои ошибки, но в консоли пишется следующее: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data (если я правильно понял, то это строка var res = $.parseJSON(response); в коде). На самой странице не появляются тексты ошибок валидатора, но они прекрасно отображаются во вкладке "Сеть" (браузера Firefox). Когда fails нет, то все работает корректно.
Привожу коды:
ajax скрипт (script.blade.php)
<script>
function AjaxFormRequest(result_id, error_id) {
$.ajax({
url: '{{ URL::to('calculate') }}',
type: "POST", //Тип запроса
dataType: "html", //Тип данных
data: $("#aj").serialize(),
success: function(response) { //Если все нормально
var res = $.parseJSON(response);
if (res.error_code == 0) { //если ошибок нет
document.getElementById(result_id).innerHTML = $("#value1").val() + " + " + $("#value2").val() + " = " + res.result;
} else { //если ошибки есть
document.getElementById(error_id).innerHTML = "Произошла ошибка при отправке формы";//res.message;
console.log("Неудача");
}
},
error: function(response) { //Если ошибка есть
document.getElementById(error_id).innerHTML = "Произошла ошибка";
}
});
}
</script>
Класс контроллер
class CalculateController extends Controller
{
public function calculate(Request $request)
{
$calculator = new Calculator();
$validator = Validator::make(Input::all(), $calculator->rules(), $calculator->messages());
if ($validator->fails()) {
return Redirect::to('/')->WithInput()->withErrors($validator);
}
$calculator->setValue1($request->input('value1'));
$calculator->setValue2($request->input('value2'));
$result = $calculator->calculate();
return response()->json(['error_code' => '0', 'result' => $result]);
}
}
И вьха main
@extends('layout')
@section('main')
//тут пошел html
@if ($errors->has())
<p style="color:red;">
@foreach ($errors->all() as $error)
{!! $error !!}<br />
@endforeach
</p>
@endif
@stop
@section('scripts')
@include('script')
@stop
Буду признателен любой подсказке.
Работает вот такой вариант:
foreach ($usefuls_id as $key => $value)
{
$q[$value->useful_id] = $value->useful_id;
}
$usefuls = Useful::whereIn('id', $q)->get();
Если кто-то знает, как можно сделать лучше, то напишите пожалуйста
Напишите откуда берется $usefuls_id я не совсем понимаю что вы там хотите сделать.
Собственно у меня есть две таблицы: course_useful и department_useful. Я хочу вытащить оттуда те useful_id, которые соответствуют определенным course_id и department_id. Нужно сделать так, чтобы в этой переменной содержались id, которые я смогу передать сюда
$usefuls = Useful::whereIn('id', $usefuls_id)->get();
чтобы получить объекты Useful и передать их в представление. Но как видите приведенный выше код ругается "Object of class stdClass could not be converted to string". Вот такой код работает
$usefuls = Useful::whereIn('id', array($usefuls_id[0]->useful_id, $usefuls_id[1]->useful_id))->get();
Короче нужно сделать так, чтобы заработал вот этот фрагмент
$usefuls = Useful::whereIn('id', $usefuls_id)->get();
У вас в $usefuls_id должна быть или коллекция или массив.
Да, это я понимаю, но вот как это сделать Методы get() и toArray() невозможно использовать.
Я могу ошибаться но по-моему
$usefuls = Useful::whereIn('id', $usefuls_id->toArray( ))->get();
Не проверял!
К сожалению это не так "Call to a member function toArray() on a non-object".
Добрый день. Есть вот такой код:
public function show($department_id, $course_id)
{
$usefuls_id = DB::select('select distinct course_useful.useful_id from course_useful join department_useful on department_useful.department_id=? and course_useful.course_id=?', array($department_id, $course_id));
$usefuls = Useful::whereIn('id', $usefuls_id)->get();
return View::make('courses.show')->with('usefuls', $usefuls);
}
Нужно получить список предметов, исходя из данных массива $usefuls_id. Появляется ошибка "Object of class stdClass could not be converted to string". Как быть?
Agel_Nash, Андрей, спасибо за помощь!
}%Попробуйте сделать одним из способов из ((http://laravel.ru/forum/viewtopic.php?id=226 этой темы))
Попробовал, не то Сам не понимаю почему...
@if ($book->translators) @foreach($book->translators as $translator) {{ $translator->name }} @endforeach @endif
пробовал так, но не помогло...
Добрый день. Есть две модели Book и Translator, связанные друг с другом отношением ManyToMany. Так как у книги не всегда есть переводчик (переводчики), то при выводе информации о книге нужно проверить есть ли они у книги или нет, чтобы не выводить пустую строку "Переводчики". Как это сделать в представлении? Код вывода такой:
@foreach($book->translators as $translator)
{{ $translator->name }}
@endforeach
Проблему решил вот как: переименовал scripts.js в scripts.blade.php, в представлении регистрации вставил
@section('scripts')
@include('users.scripts')
@stop
В коде скрипта сделал так:
url: "{{ URL::to('upload') }}",
И собственно оставил ресурсный роутинг. Все работает
create/store автоматически создаются ресурсом, зачем их добавлять?
Вообщем, не совсем понимаю как добавить новый маршрут, если используем ресурсы
Добрый день. Есть вот такой роутинг:
Route::get('create', array('uses' => 'UserController@create', 'as' => 'user.create'));
Route::post('upload', array('uses' => 'UserController@uploadAvatar'));
Route::post('store', array('uses' => 'UserController@store'));
При регистрации пользователя можно добавить аватар через ajax (будет показана превью перед сохранением). Все работает прекрасно, но стоит сделать так:
Route::post('upload', array('uses' => 'UserController@uploadAvatar'));
Route::resource('user', 'UserController');
то работа с изображением перестает работать (ни превью, ни сохранение). Что может быть не так?
Пытаюсь сохранить комментарий с помощью ajax, но происходит направление, указанное в url.
Вот ajax код:
// public/scripts/scripts.js
$(document).ready(function() {
$("#form-add-comment").submit(function() {
var text = $("#text").val();
var commentable_id = $("#commentable_id").val();
var commentable_type = $("#commentable_type").val();
var post_id = $("#post_id").val();
$.ajax({
url: 'new_comment',
type: 'POST',
data: { text: 'text', commentable_id: 'commentable_id', commentable_type: 'commentable_type', post_id: 'post_id' },
dataType: 'json',
success: function(result) {
$(".someText").html("?");
}
});
return false;
});
});
Кусок кода отображения поста (и связанных с ним комментариев):
// views/posts/show.blade.php
<div class="comments">
<ul>
@foreach($post->comments as $comment)
<li>@include('partials.comment', $comment)</li>
@endforeach
</ul>
</div>
<div class="someTetx"></div>
Контроллер:
// CommentController.php
public function create()
{
// тут сохраняем комментарий
return Response::json(array('message' => 'Вы успешно сохранили комментарий.'));
}
Роутинг:
Route::post('new_comment', array('uses' => 'CommentController@create'));
Собственно происходит направление на 'new_comment' и показ там json.
Действительно , спасибо
Я просто добавил данный код в уже существующий User.
Есть две модели:
class User extends Eloquent {
protected function posts()
{
return $this->hasMany('Post');
}
}
и
class Post extends Eloquent {
protected function user()
{
return $this->belongsTo('User');
}
}
пытаюсь создать пост следующим образом:
$post = new Post;
$post->title = Input::get('title');
$post->text = Input::get('text');
Auth::user()->posts()->save($post);
получаю следующую ошибку:
BadMethodCallException
Call to undefined method Illuminate\Database\Query\Builder::posts()
Что не так?
Проблема решена: нужно было использовать char вместо string.
Здравствуйте. Создал миграцию в laravel. Выполняю команду php artisan migrate, а мне в ответ кидает ошибку
Undefined property: Illuminate\Database\Schema\Blueprint::$string
Вот код:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function(Blueprint $table) {
$table->increments('id');
$table->string('email')->unique();
$table->string[60]('password');
$table->string('username')->unique();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
В чем ошибка?