Laravel по-русски

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

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

#1 Re: Laravel 5.x » Как узнать url обратившегося, за данными, сайта для api? » 24.07.2016 19:56:38

Есть еще одно "НО")))
Если использовать $request->url(), то возвращает url сайта-сервиса, т.е. http://siteapi.com/api/123 ))))))))

$request->url() внедрял в контроллер обрабатывающий api запросы, вернее в метод обрабатывающий api запросы

#2 Re: Laravel 5.x » Как узнать url обратившегося, за данными, сайта для api? » 24.07.2016 17:35:24

VitalN пишет:

}%Урла у обратившегося клиента  не может быть
Это по сути посетитель сайта, можно узнать его ip, user_agent  и тп

Хм. Я, видимо, ввел в заблуждение не поясним суть чуть детальнее.
Запрос к api идет не от пользователя/браузера, а от сайта на который зашел пользователь.
Как пример:
http://siteapi.com/api/123
Где http://siteapi.com сайт предоставляющий api.
Путь к api - api/
Ключ сайта - 123
Проблема в том, что ключ можно скопировать и подсунуть на ложном сайте, а вот если получить реальный url запрашивающего сайта (http://siteapi.com/), то это становиться сложнее. Не даром, при регистрации reCaptcha, google требует ввести url сайта где она будет размещена.

AlexeyMezenin пишет:

}IP через request()->ip()
URL через $request->url(), предварительно внедрив Request.

В свете выше поясненного) подскажите, где нужно ваш пример разместить?

Спасибо всем)))

#3 Laravel 5.x » Как узнать url обратившегося, за данными, сайта для api? » 24.07.2016 11:42:05

HunterNomad
Ответов: 7

Всем доброго времени суток)
Пишу небольшое api, пока прототип.
С стал вопрос, как определить url или ip обратившегося, за данными, сайта.

За ранее спасибо)

#4 Re: Laravel 5.x » "Рассыпаются" параметры при пагинации » 07.05.2016 18:57:11

Вопрос снят. Решение найдено. Тем кто налетит на подобные грабли посвящаться))
Controller:

public function index()
    {
        $avto = new CatalogAuto();
         $cars  = $avto->getAllAuto()->Paginate(20);
        $links = str_replace('/?', '?', $cars->appends(Input::except('page'))->render());
        return view('pages/autocatalog', compact('cars', 'links'));
    }

Model:
Отправлять без paginate()
И во view:

{!! $links !!}
 

#5 Laravel 5.x » "Рассыпаются" параметры при пагинации » 07.05.2016 13:34:57

HunterNomad
Ответов: 1

Всем доброго времени суток) Простите за заголовок)))))
Я даже не думал, что на пустом месте может возникнуть такая проблема.
Попросили доделать проект. В нем есть фильтр и пагинация.
Для постраничной пагинации я добавил во вьюху:

{!! $cars->appends(Input::except('page'))->render() !!}

В модели есть метод:

static public function getAllAuto()
    {
        $all = CatalogAuto::where('is_action', '=', 0)
            ->orderBy('update_date', 'desc')
            ->category()
            ->marka()
            ->model()
            ->exchange()
            ->paginate(20);
        return $all;
    }

Контроллер:

public function index()
    {
        $avto = new CatalogAuto();
        $this->data['cars'] = $avto->getAllAuto();

        return view('pages/autocatalog', $this->data);
    }

А проблема собственно в то, что при переходе по страницам пагинации меняется url
в пагинаторе вижу:

http://localhost/autocatalog/?category=0&marka[]=59&year_min=0&year_max=0&custom=0&state=0&page=2

а при переходе получаю в url

http://localhost//autocatalog/?category=0&marka%5B0%5D=59&year_min=0&year_max=0&custom=0&state=0&page=2

То есть при переходе marka[] подменяется на marka%5B0%5D

Подскажите как это исправить.
За ранее спасибо)

#7 Laravel 5.x » Валидация select multiple и возварат old selected » 21.04.2016 13:03:21

HunterNomad
Ответов: 1

Всем доброго времени суток)
Стоит задача по валидации select multiple и возварат old selected.
С валидацией более менее понятно, но вод как вывесит old selected, никак не пойму.
Если кто сталкивался с подобным подскажите как раз рулить!

Это часть моего кода.

<form role="form" method="post" action="{{ url('/') }}">
        {!! csrf_field() !!}
        <div class="form-group col-md-12">
            <div class="form-group{{ $errors->has('categories') ? ' has-error' : '' }}">
                <label for="category">Категория(ии) <span class="red">*</span></label>
                <select multiple class="form-control" id="category" name="categories[]" enctype="multipart/form-data">
                    @foreach($categories as $category)
                        <option value="{{$category->id}}">{{$category->name}}</option>
                    @endforeach
                </select>
                @if ($errors->has('categories'))
                    <span class="help-block">
                      <strong>{{ $errors->first('categories') }}</strong>
                   </span>
                @endif
            </div>
...

За ранее спасибо.

#8 Re: Laravel 5.x » Парсинг html на laravel 5 » 06.09.2015 16:36:56

Просто попытался подключить, а мне пишет "Class 'hQuery' not found"

#9 Re: Laravel 5.x » Парсинг html на laravel 5 » 06.09.2015 15:41:50

dragonattack пишет:

рекомендую https://github.com/duzun/hQuery.php

я добавил в laravel 5 так:

composer require duzun/hquery

и поправил composer.json

		"psr-4": {
			"App\\": "app/",
			"hQuery\\": "vendor/duzun/hquery/"
		}

Добрый день. А можно по подробнее по поводу подключения  hQuery и работы с ним в Laravel.
Пример как вы его используете)
Спасибо.

#10 Re: Laravel 4 » При использовании в запросе слияния union не работает orderBy ))) » 24.07.2015 15:16:16

Artdevue пишет:

Попробуйте поменять приоритет

$q1 = DB::table('...')
          ...
          ->union($q2)
          ->orderBy(..., ...)
          ->paginate(10);

Спасибо за ответ, но увы.
Если сделать так, то вылит ошибка

Syntax error or access violation: 1250 Table '...' from one of the SELECTs cannot be used in global ORDER clause

Возможно придется ставить костыль.
Все равно спасибо )

#11 Laravel 4 » При использовании в запросе слияния union не работает orderBy ))) » 21.07.2015 12:27:21

HunterNomad
Ответов: 2

Нашел то ли баг, то ли фичу.
Я постил тут вопрос - Подскажите как можно организовать сложный запрос.
И поскольку ответа пока нет, ищу решение. И решил попробовать через union. Создал два запроса

$q2 = DB::table('...')
          ...
          ->orderBy(..., ...);

и

$q1 = DB::table('...')
          ...
          ->orderBy(..., ...)
          ->union($q2)
          ->paginate(10);

И все бы не плохо, с начало выводит все по запросу q1, а затем q2. Но есть одно НО orderBy ни в первом, ни во втором случае не работает. Вывод идет по мере размещения данных в таблице.
Кто сталкивался? Это баг или фичя? big_smile

#12 Laravel 4 » Подскажите как можно организовать сложный запрос. » 20.07.2015 18:22:25

HunterNomad
Ответов: 0

Доброго времени суток.
Есть запрос с помощью конструктора запросов к двум таблицам с большим количеством leftJoin.
В одной таблице товары в другой их атрибуты. С запросом все нормально, но есть один момент.
Есть товары которые относятся к одной и той-же категории, но одни имеют атрибуты, а другие нет.
Запрос собственно является фильтром. Так вот, те товары, которые не имеют атрибутов, не выводятся вообще.
А теперь вопрос знатокам ))) Как можно организовать запрос так, что бы сначала выводились товары с атрибутами, а потом без атрибутов.
Спасибо за ранее.

#13 Re: Laravel 4 » Форма+пагинация может кто сталкивался? » 26.05.2015 12:41:58

Dualse пишет:

П.С. Поправьте, если где-то ошибся)

Не ошибаешься ) Так и есть. При каждой пагинации делается повторный запрос к базе.
Плюс я пытался отправлять из формы методом post
Решение данной проблемы мне подсказал друг (он собственно и исправил код). Нужно перейти на метод get и дописывать параметры в url пагинации.
Собственно все. Спасибо всем кто помогал. Удачи вам! )

#14 Re: Laravel 4 » Форма+пагинация может кто сталкивался? » 25.05.2015 18:46:34

явно день не мой
есть

 $filterPriceMax = $data['filter-price-min'];
 $filterPriceMin = $data['filter-price-max'];

нужно

 $filterPriceMin  = $data['filter-price-min'];
 $filterPriceMax = $data['filter-price-max'];

прошу прощения у всех за опечатки
но, увы это проблему сброса при пагинации не решило

#15 Re: Laravel 4 » Форма+пагинация может кто сталкивался? » 25.05.2015 18:15:35

Уже нашел одну ошибку
есть

..
 $filterPriceMax = $data['filter-price-min'];
        $filterPriceMin = $data['filter-price-max'];
        $price = [$filterPriceMin, $filterPriceMax];
...
->whereBetween('products.price', $price) // цена  
...

а нужно

..
       $filterPriceMax = $data['filter-price-min'];
        $filterPriceMin = $data['filter-price-max'];

...
->whereBetween('products.price', [filterPriceMin, filterPriceMax]) // цена  
...

Но тоник все равно сбрасывает

#16 Re: Laravel 4 » Форма+пагинация может кто сталкивался? » 25.05.2015 16:45:34

Дабы "простыни" не выкидывать, приведу основной код
Есть форма в виде где встроен фильтр:

{{Form::open(['url'=>$category.'/'.$products, 'class' => 'filter-form'])}}
{{Input::flash()}}
 <div class="form-group col-md-4">
           {{ Form::label(22, 'Цена: ')}}
{{Form::text('filter-price-max', (isset($data['filter-price-max'])) ? $data['filter-price-min'] : null, ['placeholder' => "от",'name' => 'filter-price-min','autocomplite' => 'off', 'class' => 'form-control'])}}
           {{Form::text('filter-price-max', (isset($data['filter-price-max'])) ? $data['filter-price-max'] : null, ['placeholder' => "до",'name' => 'filter-price-max','autocomplite' => 'off', 'class' => 'form-control'])}}
 </div>
{{Form::submit('Поиск', array('class' => 'btn btn-primary'))}}
{{Form::close()}}
{{-- Вывод списка товаров --}}
@foreach($products as $product)
...
...
@endforeach
{$products->links()}}

Далее routes

...
Route::any('/{category}/{products}', 'ProductController@allProducts');
...

Собственно ProductControlle

public function allProducts($category, $subCategory) {
        $data = Input::all();
        $products = Product::getAll($data);

    return View::make('product.all', [                    
                    'products' => $products
        ]);
}

И на по следок модель Product

public static function getAll($data) {        
        $products = Filter::cat7($data);
        return $products;
}

И модель Filter

   public static function cat7($data) { // Category 7

        if (!isset($data['_token'])) { //  загрузка страницы без фильтрации 
         $products = DB::table('products')
                ->where('products.category_id', 7)        
                ->select('products.id', 'products.title', 'products.url', 'products.description', 'products.price', 'products.created_at', 'products.status_product', 'products.hits')
                ->orderBy('products.created_at', 'DESC')
                ->paginate(10);

            return $products;
        }
        $filterPriceMax = $data['filter-price-min'];
        $filterPriceMin = $data['filter-price-max'];
        $price = [$filterPriceMin, $filterPriceMax];

        $products = DB::table('products')
                ->where('products.category_id', 7)
                ->whereBetween('products.price', $price) // цена                
                ->select('products.id', 'products.title', 'products.url', 'products.description', 'products.price', 'products.created_at', 'products.status_product', 'products.hits')
                ->orderBy('products.created_at', 'DESC')
                ->paginate(10);
        return $products;
    }

Собственно говоря и все. Возможно и не самое изящное решение но, по логике, должно работать.
После ввода в "Фильтр" цены "от" и "до" и отправки ее на сервер фильтрация срабатывает (из 10 страниц остается 4 (в зависимости от цены конечно smile )), но после  пагинации все сбрасывается на исходные количество страниц (т.е. 10).
Я понимаю, что что-то упускаю, но что .....
Мозг уже болит
Спасибо, что откликнулись

#17 Laravel 4 » Форма+пагинация может кто сталкивался? » 25.05.2015 11:15:31

HunterNomad
Ответов: 6

Доброго времени суток.
Если кто сталкивался с ниже описанной задачей подскажите как решали.
В виде списка товаров есть фильтр и есть пагинация страниц.
Проблема в том, что при пагинации по страницам данные фильтра естественно теряются и выдается ошибка.
Я подумываю о сохранении данных в сессии. Но насколько это правильная идея?
Подскажите как решить эту задачу.
Спасибо.

#18 Laravel 4 » Вопрос к тем, кто работает с Sentry » 14.05.2015 14:55:58

HunterNomad
Ответов: 0

Доброго времени суток.
Вопрос к тем, кто работает с Sentry (https://cartalyst.com/manual/sentry/2.1#installation).
Заметил странный баг, вернее даже два:
1. Новые зарегистрированные, но еще не активизировавшиеся, пользователи имеют статус в поле activated 1. Хотя должны, до активации аккаута, иметь 0.
2. У уже зарегистрированных и активизировавшихся пользователей через время поле activated меняет статус на 2, 3, и т.д.

Ни с кодом пакета, ни с кодом который мог бы привести к таким изменения никто не работал.
Если у кого возникали подобные проблемы отпишите как вы их решили.
Спасибо за ранее.

#20 Re: Laravel 4 » Поиск по базе из нескольких полей формы » 08.05.2015 12:18:37

Alex1234 пишет:

Действительно почему.
Например есть форма на 10 полей, все не обязательные т.е. пользователь может заполнить как 1 так и 10 полей.
А у себя смотришь поле 1 заполнено, валидацию прошло - при составлении запроса добавляешь AND поле1=значение формы1 и так далее.
В итоге получится запрос на поиск по полям которые заполнил пользователь.

Ты прав )), я не понял вопроса)

#21 Re: Laravel 4 » Поиск по базе из нескольких полей формы » 08.05.2015 11:26:06

>> А проверять кучу вариантов полей, что заполнено, что нет и перебирать от этого разные запросы — тупо.
А почему тупо?
Тебе все равно нужно будет их все обходить для выявления - кто чего имеет.
Сформулируй вопрос конкретнее - сколько таблиц (с названием), какие поля(с названием) и что уже пробовал.
Приведи пример таблиц.

#22 Laravel 4 » Пожалуйста помогите составить правильный запрос. » 08.05.2015 11:19:26

HunterNomad
Ответов: 1

Всем доброго времени суток!
Пожалуйста помогите составить правильный запрос.
Есть две таблицы products и images.
Изначально стояла задача вывода фильтрованного списка:

// запрос списка товаров и их главных картинок
$products = DB::table('products')
                ->orderBy('products.created_at', 'DESC')
                ->where('products.category_id', '=', $id) // id категории 
                ->leftJoin('images', 'products.id', '=', 'images.products_id')
                ->where('images.main', '=', 1) // вывод главной картинки 
                ->paginate(10);

И тут все понятно и проблем не возникало, но концепция поменялась.
С целью оптимизации работы БД было решено всем товарам, не имеющим картинок, не вносить в БД путь к картинки imagenotfound,
а просто сходу в коде это делать. И все бы хорошо, но вот зарос к фильтру  ->leftJoin('images', 'products.id', '=', 'images.products_id')
стал камне преткновения. Я никак не могу  понять как его переписать под новый вариант задачи.
Спасибо всем за ранее!здесь

#23 Re: Laravel 4 » Загрузка файлов (изображений). » 16.02.2015 18:35:21

dima9595 пишет:
HunterNomad пишет:

Урок не урок)), а пример есть.
http://image.intervention.io/use/uploads

Это библиотека, а хочется норм пример...

А это не пример?)))

// read image from temporary file
$img = Image::make($_FILES['image']['tmp_name']);

// resize image
$img->fit(300, 200);

// save image
$img->save('foo/bar.jpg');

#25 Laravel 4 » groupBy после union » 07.02.2015 12:17:12

HunterNomad
Ответов: 0

Доброго времени суток)
Не подскажете, где можно посмотреть пример groupBy после union.
union делается одной таблицы проверка по разным параметрам, вот и хочу итог сделать groupBy

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