Laravel по-русски

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

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

#1 Re: Laravel » Правильно подключить geoip » 18.08.2016 19:31:03

Он же ясно говорит что класс геоип не найден

#2 Laravel 5.x » Не правильно работает hasManyThough » 14.08.2016 10:35:26

BMTH
Ответов: 0

Есть категории, есть цветы (розы, тюльпаны) короче говоря товары, и есть типы товаров (тип розы, типы тюльпаны).  Товары относятся к категории (один ко многим), и так же товары относятся к типам (один ко многим).Я хочу вывести эти типы в категории, делую это так

    public function types()
    {
        return $this->hasManyThrough('App\Type', 'App\Product', 'type_id', 'id');
    }

Типы выводятся, но почему то совсем не правильно. В категории где есть товары, типы вообще не выводятся, в категории где товаров нет, выводятся по 2 - 3 типа, которые вообще не должны быть в этой категории. Что я делую не так?

#3 Re: Laravel 5.x » Отправка формы при помощи аякса » 28.06.2016 18:04:39

max_kp пишет:
BMTH пишет:

Нет, не выходит. Кучу всего перепробовал....
А нет ли способа без аякса залить изображение в другую таблицу при добавлен пользователя?

Думаю Вам поможет это https://laravel.ru/docs/v5/eloquent-relationships. Если я правильно понял, у Вас как-то модель изображений должна быть связана с другими моделями, которые будут использовать изображения. В выше приведенном разделе документации указан самый удобный способ (способы).

Со связями проблем нет. Проблема в отправке значения input type file, которое не отправляется

#4 Re: Laravel 5.x » передача данных » 27.06.2016 21:51:20

Татьяна пишет:
BMTH пишет:

Что во вкладке нетворк?

status 500 Internal server error

Fatal error: Call to a member function comments() on null
(это про строчку в контроллере:
$comments = Post::find($id)->comments()->get();
)

Вот и ваша ошибка:)

#6 Re: Laravel 5.x » Отправка формы при помощи аякса » 20.06.2016 18:19:41

Нет, не выходит. Кучу всего перепробовал....
А нет ли способа без аякса залить изображение в другую таблицу при добавлен пользователя?

#7 Re: Laravel 5.x » Отправка формы при помощи аякса » 20.06.2016 14:32:26

Cheshirrski пишет:

}%В форме enctype="multipart/form-data" прописан?

Да, я уже все перепроверял...

#8 Re: Laravel 5.x » Отправка формы при помощи аякса » 20.06.2016 11:55:39

Cheshirrski пишет:

}%Вы при success возвращаете Status Code:422, нужно 200.

Все заработало теперь. Спасибо)
Есть еще 1 вопрос. Я пытаюсь так же загрузить картинки на аяксе, тк у меня отдельная таблица картинок для всех моделей. Вроде все нормально, но картинки не загружаются почему то, и ошибок нет, в консоле пусто

$('#img').on('change',function(){
            var image = $(this).val();
            $.ajax({
                url: '{{ url('api/img/upload') }}',
                type: 'post',
                data: image,
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
                },
                success: function(data){
                    console.log(data);
                },
                error: function(error){
                    console.log(error);
                }
            });
        })

Код контроллера

public function uploadImg(Request $request)
    {
        if($request->hasFile('img'))
        {
            $image = $request->input('img');
            $filename  = str_replace('-','_',rand(111,99999) . '_' . strtolower(str_random(5)) . '.' . $image->getClientOriginalExtension());
            $path = public_path('upload/img/' . $filename);
            Img::make($image->getRealPath())->save($path);
            if($filename)
            {
                $upload_img = new Image();
                $upload_img->url = '/upload/img/' . $filename;
                $upload_img->save();
                return response()->json($filename);
            }
        }
    }

#9 Re: Laravel 5.x » Отправка формы при помощи аякса » 20.06.2016 09:22:34

Cheshirrski пишет:

}%Покажите что в контроллере, для success должно быть что-то вроде
%%(php)
public function postCreate(Create $request) {
  //действия в котроллере
  return response()->json([
    'message' => 'Ok',
  ]);
}
%%
Для error - если вы используете стандартный подход в Laravel с Requests, при правильном ajax-запросе должны получить Status Code:422 и json с ошибками

Почти все получилось, методом проб и ошибок. Но теперь почимуто не происходит редирект после успешного добавления в базу.

<script type="text/javascript">
        $('#form').on('submit', function(e) {
            e.preventDefault();
            var form = $("#form");
            var formData = {
                'meta_title': $('input[name=meta_title]').val(),
                'meta_description': $('input[name=meta_description]').val(),
                'meta_keywords': $('input[name=meta_keywords]').val(),
                'name'      : $('input[name=name]').val(),
                'slug'      : $('input[name=slug]').val()
            };
            $.ajax({
                url     : form.attr("action"),
                type    : form.attr("method"),
                data    : formData,
                dataType: 'json',
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
                },
                error :function( errors ) {
                    output = "<div class='alert alert-danger'><ul>";
                    $.each(errors.responseJSON, function(index, error){
                        output += "<li>" + error + "</li>";
                    });
                    output += "</ul></div>";
                    $('#append').html(output);
                    console.log(errors);
                },
                success: function(data){
                    output = "<div class='alert alert-success'><ul>";
                    $.each(data.responseJSON, function(index, success){
                        output += "<li>" + success + "</li>";
                    });
                    output += "</ul></div>";
                    $('#append').html(output);
                    console.log(data);
                    window.location = '{{ url('user') }}';
                }
            })
        })
    </script>

Даже если саксесс функция будит пустая,а в валидаторе возвращать буду редирект, всеравно он не происходит почему то.

 public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|unique:catalogs',
            'slug' => 'required'
        ]);
        if($validator->fails())
        {
            return response()->json($validator->messages(), 422);
        }
        User::create($request->all());
        return response()->json(['success' => 'Все успешно добавлено. Вы будите перенаправлены!'], 422);
    }

Вот что в консоле

jquery.min.js:4 POST http://test.app/user 422 (Unprocessable Entity)send @ jquery.min.js:4ajax @ jquery.min.js:4(anonymous function) @ create:217dispatch @ jquery.min.js:3r.handle @ jquery.min.js:3
create:232 Object {readyState: 4, responseText: "{"success":"\u0412\u0441\u0435 \u0443\u0441\u043f\…043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b!"}", responseJSON: Object, status: 422, statusText: "Unprocessable Entity"}

И почему то, сообщение об успешного добавления высвечивается в денджер алерте

#10 Re: Laravel 5.x » Отправка формы при помощи аякса » 19.06.2016 12:53:24

Аякс*
Вопрос задал не корректно.
Форма отправляется аяксом. Json возвращается, но всеравно произходит редирект, как при обычной отправке формы. Подозреваю, что валидатор отправляет не правильный хедер, сделал в валидаторе проверку

if($request->ajax() || $request->wantJson())
{
    // Тут отправка json
}

#11 Re: Laravel 5.x » Нужно добраться до производителей » 16.06.2016 14:28:42

hzone пишет:

hasManyThrought как раз позволяет получить бренды товаров категории, а каталог - категории - товары это one to many.
вот когда решишь добавлять товар в несколько категорий с брендами, это да, - и то решаемо smile

Catalog: id | name (hasMany -> category)
Category: id | catalog_id | product_id | name (belongsTo -> catalog, hasMany -> product)
Product: id | brand_id | category_id | name ...(belongsTo -> brand, belongsTo -> category)
Brand: id | name (hasMany -> product)

Сейчас, что бы вывести товары в каталоге, использую хесменисро ($catalog->product;)
Когда так же пытаюсь получить бренды через товары,и вывести в категории, выплевывает ошибку, где говорит что не модет найти таблицу. Почему? Если по вашим словам это должно работать

#12 Laravel 5.x » Нужно добраться до производителей » 16.06.2016 10:21:42

BMTH
Ответов: 3

Привет. hasManyThrought дает доступ к модели через модель которые связвны между собой one/many to many. Тоесть примерно так каталог->категории->товары через hasManyThrought можно получить товары через категорию. А если связь идет так
Категории -> товары <- бренды, как нибудь можно получить бренды через товары и вывести в категорию не джоинами а eloquent?

#13 Re: Laravel 5.x » Передать значение во все views » 16.06.2016 10:04:11

Зачем столько телодвижений?))
В App/Providers/AppServiceProvider вставьте этот код

public function boot()
    {
        view()->composer('путь до вьюхи',function($view) {
            $view->with('catalog', Catalog::groupBy('id')->get());
        });
    }

Catalog замените на свою модель

#15 Re: Laravel 5.x » return(...)->withErrors » 15.06.2016 22:04:29

Роут груп миддлевар веб убрать надо если версия 5.2.31 и выше вроде. Там автоматом веб мидлевар прописывается

#16 Re: Laravel 5.x » Админка? » 14.06.2016 12:22:38

aanon пишет:

Назрел еще один вопрос, на который не нашел однозначного ответа. Как мне самостоятельно разделить сайт на frontend и backend? Есть какие-нибудь общепринятые практики?

Route::group(['prefix' => 'admin', 'namespace' => 'путь до папки где лежат контроллеры для бекенда', 'middleware' => ['auth']], function() {
// Тут роуты для админки
});

#17 Re: Laravel 5.x » Оптимальный способ получить данные из URI » 13.06.2016 15:07:01

AlexeyMezenin пишет:
BMTH пишет:

Можно сделать инпут хидден с валуе айди новости,и потом в контроллере привязывать уже

В данном случае это не будет работать. Элемент input hidden хорош в тех случаях, когда данные в контроллер передаются методом POST при передаче данных формы.

Это варриант идеален когда отправка идент не на страницу с постом,а например куданибудь на post/reply

#18 Re: Laravel 5.x » Оптимальный способ получить данные из URI » 13.06.2016 10:55:48

Можно сделать инпут хидден с валуе айди новости,и потом в контроллере привязывать уже

#19 Re: Laravel 5.x » Laravel и много поддоменов » 12.06.2016 20:27:30

hzone пишет:

наверняка у статей есть таймштампы created_at и updated_at ?
если да, то самый простой вариант автоматизировать так, чтобы вообще не надо было никуда нажимать.
просто в конфиг пишешь длительность (например в часах) "новизны",
а при выводе в шаблоне смотришь, если дата create_at меньше чем created_at + Хчасов, то = "новая".

Вот, идеально. Спасибо

#20 Re: Laravel 5.x » Laravel и много поддоменов » 12.06.2016 14:08:17

hzone пишет:
BMTH пишет:
hzone пишет:

И УЧТИТЕ (ВСЕ), ЧТО У VirtualDocumentRoot НЕТ DocumentRoot (И НЕ ИЩИТЕ), ВОЗМОЖНО РАБОТАТЬ НЕ БУДЕТ.
Поэтому никто так не делает.

Значит мертвая тема...

не обязательно.
у меня проекты работают нормально.
однако ещё один хряк - DocumentRoot используется от несущего домена, хоть и неявно.
а проекты работают потому что они от realpath/dirname стартуют

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

#22 Re: Laravel 5.x » Laravel и много поддоменов » 12.06.2016 11:09:23

hzone пишет:

И УЧТИТЕ (ВСЕ), ЧТО У VirtualDocumentRoot НЕТ DocumentRoot (И НЕ ИЩИТЕ), ВОЗМОЖНО РАБОТАТЬ НЕ БУДЕТ.
Поэтому никто так не делает.

Значит мертвая тема...

#23 Re: Laravel 5.x » Laravel и много поддоменов » 11.06.2016 21:36:25

hzone пишет:

варианты для апача^

1.
просто и быстро
<VirtualHost 1.2.3.4:80>
    DocumentRoot "/www/example3"
    ServerName www.example.net
    ServerAlias *.example.net
    # ...
</VirtualHost>

2.
сложно, но круто
надо изучить директиву
VirtualDocumentRoot
пример

%% 	insert a %
%p 	insert the port number of the virtual host
%N.M 	insert (part of) the name
0 	the whole name
1 	the first part
2 	the second part
-1 	the last part
-2 	the penultimate part
2+ 	the second and all subsequent parts
-2+ 	the penultimate and all preceding parts
1+ and -1+ 	the same as 0
UseCanonicalName    Off
VirtualDocumentRoot "/usr/local/apache/vhosts/%0"

Ого. У меня апач. Это автоматом все бкдит, или придется для новом пользователе все
Прописывать?

#24 Laravel 5.x » Laravel и много поддоменов » 11.06.2016 07:56:04

BMTH
Ответов: 11

Привет. Хочу вынести профили пользователей на сабдомены. Пример nickname.site.name.
В роутах прописал Route::group([domain=> {subdomain}.site.name]
А как быть с httpd.conf? Что ткда прописовать каждый раз?

#25 Re: Laravel 5.x » Проблема с select при редактировани » 10.06.2016 09:45:09

hzone пишет:

<div id="divID">
    <label for="text">myLabel</label>
    <input type="text" name="text" id="text" value="text">
</div>

jQuery

var $input = $('#myID').find('input[type="text"][name="text"]');
$input.attr('type','checkbox');

был text input, стал checkbox

но чем тебе поможе этот js я не знаю, я вообще не понял зачем тебе всё это ;-)

по теме поставить selected

@foreach.....

<option value="XXX" @if($preDefinedValue==$page->value) selected @endif >YYY</option>

@endforeach

так понятно?

Ога)
А насчет js, ВиталН начал тему,что и на js селектед поставить мона)

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