Laravel по-русски

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

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

#1 Re: Laravel 4 » Как загрузить несколько файлов/картинок в Laravel 4? » 19.09.2014 14:16:17

gml

Моя невнимательность. Скобку случайно удалил. Прошу администратора удалить тему)

{{ 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'))) }}

#3 Laravel 4 » Как загрузить несколько файлов/картинок в Laravel 4? » 19.09.2014 13:45:37

gml
Ответов: 1

Доброго времени суток!

Возникла проблема:

// 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

#4 Re: Laravel 4 » Как правильно защитить админку /admin/* Route? » 19.09.2014 12:19:32

gml
abler98 пишет:

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'.

#5 Laravel 4 » Как правильно защитить админку /admin/* Route? » 19.09.2014 10:52:22

gml
Ответов: 4

С помощью мануала смог сделать запрет только на get, но если в любой форме action подменить на action="Ссылка на добавление статьи" method="POST", то произойдет добавление/ запрос POST на данный url ( admin/add/{id} ).

Есть ли способ, запрета и GET и POST любых запросов, которые адресуются на /admin и /admin/* ?

#6 Re: Laravel 4 » Как организовать поиск по нескольким данным в Laravel 4.2? » 19.09.2014 09:07:40

gml

Вам стоит сначала подучить PHP, а затем задавать вопросы про Laravel.

  1. Когда вызывается where() или другой метод запроса на классе модели (Post) — результатом вызова является объект запроса, то есть Query
  2. Соответственно если нужно ограничить результаты одного запроса — на одном и том же объекте Query вызываются новые условия (where)
  3. В вашем коде $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.

Спасибо еще раз!

#7 Re: Laravel 4 » Как организовать поиск по нескольким данным в Laravel 4.2? » 19.09.2014 07:48:40

gml
  1. Пользуйтесь условиями… if ($data[’price_min’]) $query->where(…);
  2. Аналогично с отображением всех постов — если ни один if не сработал условия к запросу не добавятся.

Пожалуйста, покажите весь код. Я и в php не профи)

Пишу так:

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

Не смог найти уроков в интернете по данной теме, именно с использованием нескольким данных.

#8 Re: Laravel 4 » Как организовать поиск по нескольким данным в Laravel 4.2? » 18.09.2014 21:21:25

gml
SMGladkovskiy пишет:

И опять, ман Вам в помощь.


Благодарю за полезную информацию, но я в 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. К примеру, если в Поисковик вбить только минимальную сумму, то ничего не выходит.

И, как сделать, чтобы отображались все посты, если в Поисковике ничего не выбрано, а просто нажали на кнопку?

#9 Re: Laravel 4 » Как организовать поиск по нескольким данным в Laravel 4.2? » 17.09.2014 21:34:00

gml
Proger_XP пишет:

}%А в чём проблема?
%%
YourModel::where('price', '>', 123)->where('price', '<', 456)->where('district_id', '=', 9)->...->get()
%%
**SMGladkovskiy** дал ссылку на доки, читайте. На русском есть ((http://laravel.ru/docs/v4/eloquent тут)).


Спасибо! Только вот, если не указывать, к примеру, максимальную сумму, то выдает ошибку.

#10 Laravel 4 » Как организовать поиск по нескольким данным в Laravel 4.2? » 17.09.2014 10:24:31

gml
Ответов: 9

Добрый день!

Подскажите, как сделать поиск по нескольким данным?

Имеется форма:

{{ 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 начинающий.

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