Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Как избежать вызова ajax при редиректе » 22.06.2016 16:15:56

Tkas
Ответов: 1

Здравствуйте.

Я передаю в контроллер через 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

Буду признателен любой подсказке.

#3 Re: Laravel 4 » Как работать с результатом DB::select? » 30.05.2014 23:30:18

Работает вот такой вариант:

foreach ($usefuls_id as $key => $value)
{
     $q[$value->useful_id] = $value->useful_id;
}	

$usefuls = Useful::whereIn('id', $q)->get();

Если кто-то знает, как можно сделать лучше, то напишите пожалуйста smile

#4 Re: Laravel 4 » Как работать с результатом DB::select? » 30.05.2014 23:08:25

flatter пишет:

Напишите откуда берется $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();

#5 Re: Laravel 4 » Как работать с результатом DB::select? » 30.05.2014 21:57:04

flatter пишет:

У вас в  $usefuls_id должна быть или коллекция или массив.

Да, это я понимаю, но вот как это сделать smile Методы get() и toArray() невозможно использовать.

#6 Re: Laravel 4 » Как работать с результатом DB::select? » 30.05.2014 21:09:25

flatter пишет:

Я могу ошибаться но по-моему

$usefuls = Useful::whereIn('id', $usefuls_id->toArray( ))->get();

Не проверял!

К сожалению это не так "Call to a member function toArray() on a non-object".

#7 Laravel 4 » Как работать с результатом DB::select? » 30.05.2014 10:34:18

Tkas
Ответов: 8

Добрый день. Есть вот такой код:

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". Как быть?

#9 Re: Laravel 4 » Проверка на существование записей в связующей таблице » 22.04.2014 18:03:08

Cheshirrski пишет:

}%Попробуйте сделать одним из способов из ((http://laravel.ru/forum/viewtopic.php?id=226 этой темы))

Попробовал, не то sad Сам не понимаю почему...

#10 Re: Laravel 4 » Проверка на существование записей в связующей таблице » 22.04.2014 17:06:19

Ellrion пишет:
@if ($book->translators)
   @foreach($book->translators as $translator)
        {{ $translator->name }}
    @endforeach
@endif

пробовал так, но не помогло...

#11 Laravel 4 » Проверка на существование записей в связующей таблице » 22.04.2014 11:57:56

Tkas
Ответов: 8

Добрый день. Есть две модели Book и Translator, связанные друг с другом отношением ManyToMany. Так как у книги не всегда есть переводчик (переводчики), то при выводе информации о книге нужно проверить есть ли они у книги или нет, чтобы не выводить пустую строку "Переводчики". Как это сделать в представлении? Код вывода такой:

@foreach($book->translators as $translator)
     {{ $translator->name }}
@endforeach

#12 Re: Laravel 4 » При ресурсном роутинге не работает ajax » 28.03.2014 10:38:09

Проблему решил вот как: переименовал scripts.js в scripts.blade.php, в представлении регистрации вставил

@section('scripts')
@include('users.scripts')
@stop

В коде скрипта сделал так:

url: "{{ URL::to('upload') }}",

И собственно оставил ресурсный роутинг. Все работает smile

#13 Re: Laravel 4 » При ресурсном роутинге не работает ajax » 25.03.2014 21:19:37

create/store автоматически создаются ресурсом, зачем их добавлять?

#14 Re: Laravel 4 » При ресурсном роутинге не работает ajax » 25.03.2014 21:10:10

Вообщем, не совсем понимаю как добавить новый маршрут, если используем ресурсы sad

#15 Laravel 4 » При ресурсном роутинге не работает ajax » 24.03.2014 23:45:31

Tkas
Ответов: 6

Добрый день. Есть вот такой роутинг:

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');

то работа с изображением перестает работать (ни превью, ни сохранение). Что может быть не так?

#16 Веб-разработка » Не срабатывает AJAX » 14.03.2014 13:06:04

Tkas
Ответов: 1

Пытаюсь сохранить комментарий с помощью 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.

#19 Laravel 4 » Автоматическое заполнение поля дочерней таблицы » 13.03.2014 13:16:24

Tkas
Ответов: 4

Есть две модели:

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()

Что не так?

#20 Re: Laravel 4 » Не работают миграции в laravel » 09.03.2014 15:34:27

Проблема решена: нужно было использовать char вместо string.

#21 Laravel 4 » Не работают миграции в laravel » 09.03.2014 15:25:43

Tkas
Ответов: 2

Здравствуйте. Создал миграцию в 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');
	}

}

В чем ошибка?

Подвал раздела