Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Есть еще одно "НО")))
Если использовать $request->url(), то возвращает url сайта-сервиса, т.е. http://siteapi.com/api/123 ))))))))
$request->url() внедрял в контроллер обрабатывающий api запросы, вернее в метод обрабатывающий api запросы
}%Урла у обратившегося клиента не может быть
Это по сути посетитель сайта, можно узнать его ip, user_agent и тп
Хм. Я, видимо, ввел в заблуждение не поясним суть чуть детальнее.
Запрос к api идет не от пользователя/браузера, а от сайта на который зашел пользователь.
Как пример:
http://siteapi.com/api/123
Где http://siteapi.com сайт предоставляющий api.
Путь к api - api/
Ключ сайта - 123
Проблема в том, что ключ можно скопировать и подсунуть на ложном сайте, а вот если получить реальный url запрашивающего сайта (http://siteapi.com/), то это становиться сложнее. Не даром, при регистрации reCaptcha, google требует ввести url сайта где она будет размещена.
}IP через request()->ip()
URL через $request->url(), предварительно внедрив Request.
В свете выше поясненного) подскажите, где нужно ваш пример разместить?
Спасибо всем)))
Всем доброго времени суток)
Пишу небольшое api, пока прототип.
С стал вопрос, как определить url или ip обратившегося, за данными, сайта.
За ранее спасибо)
Вопрос снят. Решение найдено. Тем кто налетит на подобные грабли посвящаться))
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 !!}
Всем доброго времени суток) Простите за заголовок)))))
Я даже не думал, что на пустом месте может возникнуть такая проблема.
Попросили доделать проект. В нем есть фильтр и пагинация.
Для постраничной пагинации я добавил во вьюху:
{!! $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
Подскажите как это исправить.
За ранее спасибо)
Вопрос снят. Проблема решена.
Всем доброго времени суток)
Стоит задача по валидации 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>
...
За ранее спасибо.
Просто попытался подключить, а мне пишет "Class 'hQuery' not found"
рекомендую https://github.com/duzun/hQuery.php
я добавил в laravel 5 так:
composer require duzun/hquery
и поправил composer.json
"psr-4": { "App\\": "app/", "hQuery\\": "vendor/duzun/hquery/" }
Добрый день. А можно по подробнее по поводу подключения hQuery и работы с ним в Laravel.
Пример как вы его используете)
Спасибо.
Попробуйте поменять приоритет
$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
Возможно придется ставить костыль.
Все равно спасибо )
Нашел то ли баг, то ли фичу.
Я постил тут вопрос - Подскажите как можно организовать сложный запрос.
И поскольку ответа пока нет, ищу решение. И решил попробовать через union. Создал два запроса
$q2 = DB::table('...')
...
->orderBy(..., ...);
и
$q1 = DB::table('...')
...
->orderBy(..., ...)
->union($q2)
->paginate(10);
И все бы не плохо, с начало выводит все по запросу q1, а затем q2. Но есть одно НО orderBy ни в первом, ни во втором случае не работает. Вывод идет по мере размещения данных в таблице.
Кто сталкивался? Это баг или фичя?
Доброго времени суток.
Есть запрос с помощью конструктора запросов к двум таблицам с большим количеством leftJoin.
В одной таблице товары в другой их атрибуты. С запросом все нормально, но есть один момент.
Есть товары которые относятся к одной и той-же категории, но одни имеют атрибуты, а другие нет.
Запрос собственно является фильтром. Так вот, те товары, которые не имеют атрибутов, не выводятся вообще.
А теперь вопрос знатокам ))) Как можно организовать запрос так, что бы сначала выводились товары с атрибутами, а потом без атрибутов.
Спасибо за ранее.
П.С. Поправьте, если где-то ошибся)
Не ошибаешься ) Так и есть. При каждой пагинации делается повторный запрос к базе.
Плюс я пытался отправлять из формы методом post
Решение данной проблемы мне подсказал друг (он собственно и исправил код). Нужно перейти на метод get и дописывать параметры в url пагинации.
Собственно все. Спасибо всем кто помогал. Удачи вам! )
явно день не мой
есть
$filterPriceMax = $data['filter-price-min'];
$filterPriceMin = $data['filter-price-max'];
нужно
$filterPriceMin = $data['filter-price-min'];
$filterPriceMax = $data['filter-price-max'];
прошу прощения у всех за опечатки
но, увы это проблему сброса при пагинации не решило
Уже нашел одну ошибку
есть
..
$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]) // цена
...
Но тоник все равно сбрасывает
Дабы "простыни" не выкидывать, приведу основной код
Есть форма в виде где встроен фильтр:
{{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 (в зависимости от цены конечно )), но после пагинации все сбрасывается на исходные количество страниц (т.е. 10).
Я понимаю, что что-то упускаю, но что .....
Мозг уже болит
Спасибо, что откликнулись
Доброго времени суток.
Если кто сталкивался с ниже описанной задачей подскажите как решали.
В виде списка товаров есть фильтр и есть пагинация страниц.
Проблема в том, что при пагинации по страницам данные фильтра естественно теряются и выдается ошибка.
Я подумываю о сохранении данных в сессии. Но насколько это правильная идея?
Подскажите как решить эту задачу.
Спасибо.
Доброго времени суток.
Вопрос к тем, кто работает с Sentry (https://cartalyst.com/manual/sentry/2.1#installation).
Заметил странный баг, вернее даже два:
1. Новые зарегистрированные, но еще не активизировавшиеся, пользователи имеют статус в поле activated 1. Хотя должны, до активации аккаута, иметь 0.
2. У уже зарегистрированных и активизировавшихся пользователей через время поле activated меняет статус на 2, 3, и т.д.
Ни с кодом пакета, ни с кодом который мог бы привести к таким изменения никто не работал.
Если у кого возникали подобные проблемы отпишите как вы их решили.
Спасибо за ранее.
Решение найдено) Вопрос закрыт.
Действительно почему.
Например есть форма на 10 полей, все не обязательные т.е. пользователь может заполнить как 1 так и 10 полей.
А у себя смотришь поле 1 заполнено, валидацию прошло - при составлении запроса добавляешь AND поле1=значение формы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')
стал камне преткновения. Я никак не могу понять как его переписать под новый вариант задачи.
Спасибо всем за ранее!здесь
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');
Урок не урок)), а пример есть.
http://image.intervention.io/use/uploads
Доброго времени суток)
Не подскажете, где можно посмотреть пример groupBy после union.
union делается одной таблицы проверка по разным параметрам, вот и хочу итог сделать groupBy