Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Моя невнимательность. Скобку случайно удалил. Прошу администратора удалить тему)
{{ Form::model($slider, array('action' => array('SliderController@add', 'files' => true, 'enctype' =>'multipart/form-data', 'id' => 'formImg'))) }}
// to:
{{ Form::model($slider, array('action' => array('SliderController@add'), 'files' => true, 'enctype' =>'multipart/form-data', 'id' => 'formImg'))) }}
Доброго времени суток!
Возникла проблема:
// Controller
public function add(){
$data = Input::all();
foreach (Input::file('image') as $data['image']) {
// images
$destinationPath = 'uploads/'.$data['post_id'].'-post/';
if ($data['image'] == ''){
return 'Загрузите image картинку';
}
$filename = $data['image']->getClientOriginalName();
//$extension =$file->getClientOriginalExtension(); //if you need extension of the file
$uploadSuccess = $data['image']->move($destinationPath, $filename);
$data['image'] = $uploadSuccess;
if( $uploadSuccess ) {
} else {
return 'Ошибка загрузки image картинки';
}
$image = Sliders::add($data);
if ($image instanceof Exception){
return 'error';
}
};
// form
{{ Form::model($slider, array('action' => array('SliderController@add', 'files' => true, 'enctype' =>'multipart/form-data', 'id' => 'formImg'))) }}
{{ Form::file('image[]', [ 'multiple', 'required' ]) }}
{{ Form::submit('Добавить', [ 'class' => 'btn btn-primary' ]) }}
{{ Form::close() }}
<script>
$(document).ready(function(){
var $form = $('#formImg');
var request = new XMLHttpRequest();
$(form).on('submit', function(e){
e.preventDefault();
var formdata = new FormData(form); // form element
request.open('image', '/admin/slider/addimage/'); // route laravel
request.send(formdata);
}, false);
});
</script>
При запросе, выдает ошибку Invalid argument supplied for foreach()
Ругается на
foreach (Input::file('image') as $data['image'])
видимо на Input::file('image'), но не понятно что именно не так.
Все делал по уроку: https://www.youtube.com/watch?v=PNtuds0l8bA
app/routes.php
Route::group(array('before' => 'admin'), function () { Route::any('admin/add/{id}', function ($id) { ... }); });
И в файле app/filters.php добавить фильтр admin
Спасибо большое!
Также, нашел еще один способ:
// app/filter.php
Route::filter('guest', function()
{
if (!Auth::check()) return Redirect::to('/');
});
Route::when('admin/*', 'guest', array('post', 'get', 'put', 'delete'));
В результате, когда (when) будет запрос на страницы admin/*, то происходит фильтр 'quest'.
С помощью мануала смог сделать запрет только на get, но если в любой форме action подменить на action="Ссылка на добавление статьи" method="POST", то произойдет добавление/ запрос POST на данный url ( admin/add/{id} ).
Есть ли способ, запрета и GET и POST любых запросов, которые адресуются на /admin и /admin/* ?
Вам стоит сначала подучить PHP, а затем задавать вопросы про Laravel.
- Когда вызывается where() или другой метод запроса на классе модели (Post) — результатом вызова является объект запроса, то есть Query
- Соответственно если нужно ограничить результаты одного запроса — на одном и том же объекте Query вызываются новые условия (where)
- В вашем коде $result переопределяется 5 раз, это совсем не то, что вам нужно
PHP$query = Post::query();
$data['price_min'] and $query = $query->where('price', '>=', $data['price_min']);
$data['price_max'] and $query = $query->where('price', '<=', $data['price_max']);
$data['district'] and $query = $query->where('district_id', '=', $data['district']);
$data['zavtype'] and $query = $query->where('zavtype_id', '=', $data['zavtype']);
$data['kuhtype'] and $query = $query->where('kuhtype_id', '=', $data['kuhtype']);
$result = $query->get();
Вроде бы все работает как нужно. Спасибо большое!! Ваши ответы на вопросы других пользователей, также помогли мне в разработке. Надеюсь, и этот ответ поможет другим пользователям.
Обстоятельства так сложились, что нужно было быстро разработать сайт + немного изучить php.
- Пользуйтесь условиями… if ($data[’price_min’]) $query->where(…);
- Аналогично с отображением всех постов — если ни один if не сработал условия к запросу не добавятся.
Пожалуйста, покажите весь код. Я и в php не профи)
if($data['price_min']){
$result = Post::where('price', '>=', $data['price_min'])->get();
}else
if($data['price_max']){
$result = Post::where('price', '<=', $data['price_max'])->get();
}else
if($data['district']){
$result = Post::where('district_id', '=', $data['district'])->get();
}else
if($data['zavtype']){
$result = Post::where('zavtype_id', '=', $data['zavtype'])->get();
}else
if($data['kuhtype']){
$result = Post::where('kuhtype_id', '=', $data['kuhtype'])->get();
}
Соответственно, условия работают по отдельности. К примеру, если я выберу Район и минимальную Цену, то будет работать только последнее условие(Район, district).
Не смог найти уроков в интернете по данной теме, именно с использованием нескольким данных.
И опять, ман Вам в помощь.
Благодарю за полезную информацию, но я в backend нуб.
Написал так:
$result = Post::where('district_id', '=', $data['district'])
->where(function($query) use ($data)
{
$query->where('price', '>=', $data['price_min'])
->where('price', '<=', $data['price_max']);
})
->orWhere('zavtype_id', '=', $data['zavtype'])
->where(function($query) use ($data)
{
$query->where('price', '>=', $data['price_min'])
->where('price', '<=', $data['price_max']);
})
->orWhere('kuhtype_id', '=', $data['kuhtype'])
->where(function($query) use ($data)
{
$query->where('price', '>=', $data['price_min'])
->where('price', '<=', $data['price_max']);
})
->get();
но, код работает, если не трогать max, min price. К примеру, если в Поисковик вбить только минимальную сумму, то ничего не выходит.
И, как сделать, чтобы отображались все посты, если в Поисковике ничего не выбрано, а просто нажали на кнопку?
}%А в чём проблема?
%%
YourModel::where('price', '>', 123)->where('price', '<', 456)->where('district_id', '=', 9)->...->get()
%%
**SMGladkovskiy** дал ссылку на доки, читайте. На русском есть ((http://laravel.ru/docs/v4/eloquent тут)).
Спасибо! Только вот, если не указывать, к примеру, максимальную сумму, то выдает ошибку.
Добрый день!
Подскажите, как сделать поиск по нескольким данным?
Имеется форма:
{{ Form::open(array( 'url' => '/search')) }}
<select name="district" class="form-control">
<option value="0">Выберите район</option>
@foreach($districts as $district)
<option value="{{ $district->id }}">{{ $district->name }}</option>
@endforeach
</select>
<select name="zavtype" class="form-control">
<option value="0">Выберите тип</option>
@foreach($zavtypes as $zavtype)
<option value="{{ $zavtype->id }}">{{ $zavtype->name }}</option>
@endforeach
</select>
<select name="kuhtype" class="form-control">
<option value="0">Выберите вид</option>
@foreach($kuhtypes as $kuhtype)
<option value="{{ $kuhtype->id }}">{{ $kuhtype->name }}</option>
@endforeach
</select>
{{ Form::text('price_min', null, [ 'placeholder' => 'Цена от', 'autocomplete' => 'off', 'class' => 'form-control' ]) }}
{{ Form::text('price_max', null, [ 'placeholder' => 'Цена от', 'autocomplete' => 'off', 'class' => 'form-control' ]) }}
{{ Form::submit('Поиск', [ 'class' => 'btn btn-default' ]) }}
{{ Form::close() }}
Поиск производиться по таблице posts. У каждого поста есть district_id, zavtype_id и kuhtype_id
Также в таблице имеется price, и по нему идет поиск price_min и price_max.
// SearchController
<?php
class SearchController extends BaseController{
public function search(){
$data = Input::all();
$results = Search::get($data);
return View::make('search', array(
'results' => $results,
'districts' => $districts,
'zavtypes' => $zavtypes,
'kuhtypes' => $kuhtypes
));
}
}
?>
// Search.php - model
$result = Post::where('district_id', '=', $data['district']);
Подскажите, как сделать поиск по нескольким данным (district_id, zavtype_id, kuhtype и по ценам) ?
Если я не правильно выстроил логику, то буду рад замечаниям, т.к. в Laravel начинающий.