Laravel по-русски

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

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

#1 Re: Laravel 5.x » Работа с getimagesize() на сервере » 08.05.2018 15:21:45

В вашем случае нет необходимости получать файл удаленно по протоколу http.
Попробуйте получить его локально.

PHP
$img_info getimagesize(public_path() . '/' $clock->url);

#2 Re: Laravel 5.x » Вопрос по php » 31.01.2018 18:22:35

Не знаю, почему у вас не получается.
Этот же код, только с передачей this.
Тест

#3 Re: Laravel 5.x » Вопрос по php » 30.01.2018 20:28:56

Можно в метод, в качестве аргумента передать объект Button, т.е. самого себя.

PHP
// ...
public function build($method)
{
    if(
is_callable($method)) {
        
$method($this);
    }
// ...

#4 Re: Вакансии » Стажировка для начинающего Laravel-разработчика » 18.05.2017 09:21:20

Здравствуйте

... По окончанию стажировки возможно получения удаленной работы Junior Laravel Developer

Сколько по времени будет длиться стажировка?

#5 Re: Laravel 5.x » Ошибка SQLSTATE[42S21] » 30.03.2017 14:33:57

SZV пишет:

Может быть внешние ключи можно установить неким более простым способом?

Судя по "mySQL 5.7-64" у вас установлен OpenServer? Там есть PhpMyadmin.
Зайдите туда, выберите вашу БД и выполните запрос
Для юзеров

alter table articles add foreign key articles_user_id_foreign (user_id) references users(id)

И для категорий

alter table articles add foreign key articles_category_id_foreign (category_id) references categories(id)

Ну и да. Вам уже написали

constb пишет:

...внешние ключи нужны только в связке с on cascade delete, on cascade update и on cascade set null

#6 Re: Laravel 5.x » Ошибка SQLSTATE[42S21] » 30.03.2017 10:09:57

SZV пишет:

... У меня вначале вообще не устанавливались таблицы, установил только когда перешел mySQL на 5.7-64

Документация https://laravel.com/docs/5.4/migrations#indexes

Laravel 5.4 по умолчанию использует кодировку utf8mb4, которая включает в себя поддержку смайлов "emoji"
Если вы хотите использовать mysql 5.6, то можно в AppServiceProvider => boot добавить Schema::defaultStringLength(191);
либо пойти в config => database и в настройках mysql сменить кодировку utf8mb4 на utf8 и collation на utf8_unicode_ci, но тогда поддержки "emoji" не будет...

Теперь, что касается миграции...

Мускул же вам понятно написал причину ошибки.
Вы пытаетесь добавить столбец, который уже существует в таблице.
Вы уже создавали этот столбец в предыдущей миграции, верно? Если вы действительно хотите его изменить, то добавьте ->change()

$table->integer('user_id')->unsigned()->default(1)->change();
*должен быть установлен doctrine/dbal
--
Если вам не нужно менять столбец, а нужно только связать ключи, то эту строку вообще удалите, но учтите, что для связывания user_id должен быть unsigned, иначе опять выскочит ошибка.

#7 Re: Laravel 5.x » Редирект назад с якорем » 04.03.2017 12:37:13

Как вариант, захардкодить url

return redirect('/url_form#anchor')->withInput()->withErrors($validator);

#8 Re: Laravel 5.x » Проблемы с Laravel 5.4 + ajax » 03.03.2017 12:53:17

Попробуйте эмулировать метод PUT в запросе

...
url: '/change',
method: 'POST',
data: {id: item_id, public : 0, _method: 'PUT'},
...

#9 Re: Laravel 5.x » Проблема с Session::get(); » 02.03.2017 18:40:53

constb пишет:

я точно не знаю но чисто наугад могу предположить что конструктор отрабатывает до того как будет создан объект сессии и в \Session появятся какие-либо данные

Можно не проверять. Всё так и есть.
Начиная с версии 5.3, в конструкторе контроллера нельзя получить доступ к сессии и Auth::user() тоже, т.к. middlware еще не запустился.
Подобный вопрос на laracast https://laracasts.com/discuss/channels/ … onstructor
Об этом упоминается в документации здесь https://laravel.com/docs/5.3/upgrade#5. … nstructors
Еще больше про это написано здесь ну и костыль там же https://laravel-news.com/controller-con … aravel-5-3

#10 Re: Laravel 5.x » Присвоение значения из JavaScript в @foreach » 28.02.2017 01:21:54

$articles = App\Article::find($id);

@foreach($articles as $article)

<ul>
  <li>{{$article->title}}</li>
  <li>{{...}}</li>
  <li id="time"></li>
</ul>

@endforeach

1. Про foreach одной статьи вам уже написали.
2. В цикле id="time" ? - хммм ... видимо действительно :примерный код без деталей:

Теперь по делу.
Присваивать из ПХП в javascript или перегонять что-то в json не нужно.

Как вариант, вы можете тегам li присвоить атрибут data, в который можете записать время.
Судя по вашему скрипту, вам нужен timestamp. Вот его и присвойте.

@foreach($articles as $article)

<ul>
  <li>{{$article->title}}</li>
  <li>{{...}}</li>
  <li data-time="{{ $article->created_at->timestamp }}">{{ $article->created_at->format('Нужный вам формат') //или оставьте пустым }}</li>
</ul>

@endforeach

Далее javascript

    var li_time = document.querySelectorAll('[data-time]'),timers =[];

    for (var key in li_time) {
        if (li_time.hasOwnProperty(key)) {
            setTimer(li_time, key);
        }
    }

    function setTimer(lis, i) {
        var li = lis[i];
        timers[i] = setInterval(function() {
            li.innerHTML = parseInt(new Date().getTime() / 1000) - parseInt(li.dataset.time); // Или любая ваша реализация
        }, 1000);
    }

Вот и всё. Скрипт пробежится по вашим li и запустит setInterval с вашей реализацией для каждого элемента.

#11 Re: Laravel 5.x » Ошибка при попытке постом отправить фотографии » 19.02.2017 18:41:23

Ваш damnUploader не отправляет никакие кастомные заголовки, в том числе и не отправляет X-Requested-With (Ну вот так задумал автор)
Если вы загружаете что-то этим аплоадером, то проверять на if ($request->ajax()) нельзя, - всегда будет false.

Можно поступить по варварски big_smile

Не забываем в хедере указать токен <meta name="csrf-token" content="{{ csrf_token() }}" />

Заходите в файл jquery.damnuploader.js и на 279 строке, после xhr.open("POST", url); вставляете

xhr.setRequestHeader('X-CSRF-TOKEN', $('meta[name="csrf-token"]').attr('content'));

Если хотите на сервере проверять на ajax, то тогда нужно еще добавить строчку

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

---
Сохраняете. Чистите кеш браузера. Пробуете smile

#12 Re: Laravel 5.x » Ошибка при попытке постом отправить фотографии » 17.02.2017 17:48:58

Судя по картинке с заголовками, нет там X-CSRF-TOKEN.

Каким скриптом загружаете картинку?
Осмелюсь предположить, что вы картинку отправляете каким-то сторонним загрузчиком, который не использует jQuery ajax.
Потому и $.ajaxSetup не работает.

Если это так, то смотрите документацию скрипта и ищите как добавить заголовки.

#13 Re: Laravel 5.x » Как использовать индексы в Laravel » 16.02.2017 18:28:59

Вкратце...

$users = User::where('id', '>', 100)->get();

Этот запрос и так использует индекс, т.к. при $table->increments('id') создается индекс.

$table->index('state') нужно создавать в случаях... например, если у вас в таблице с юзерами будет поле age - возраст.
И вы будете выбирать юзеров учитывая возраст.

$users = User::where('age', '>', 29)->get();

В этом случае желательно создать индекс для поля age, что бы не сканировалась вся таблица при выборке.
Выглядеть в миграции это будет так

Schema::create('users', function (Blueprint $table) {
  $table->increments('id');
  ....
  $table->unsignedTinyInteger('age')->index();
  ....
  Либо отдельно добавить индекс
  $table->index('age');
  ....
  $table->timestamps();
});

Создается индекс и выборка будет быстрее.
.....
В случае, если выборка будет по двум и более полям, то желательно создать уже составной индекс по этим полям.

$table->index(['age','city']);

Такой запрос будет использовать составной индекс

User::where('age', '>', 29)
          ->where('city', 'Москва')
          ->get();

#14 Re: Laravel 5.x » Route [/] not defined. » 14.02.2017 17:27:10

В 5.0 присваивать имена маршрутам так
https://laravel.com/docs/5.0/routing#named-routes

Если вы перенаправляете на главную через ->route('/'), то в вашем случае надо в роутах написать так

Route::get('/',[
    'as' => '/', 'uses' => 'WelcomeController@index'
]);

Но можно и не давать никакие имена маршрутам. В контроллере сделайте редирект на url: return redirect('/')  или action.
Тем более на главную страницу...

#15 Re: Laravel 5.x » Route [/] not defined. » 14.02.2017 16:44:07

А что вы пытаетесь сделать? Не url ли случайно передаете?

->route('route name');
Сюда передается имя маршрута. У вас назван хоть один маршрут так?
Посмотрите artisan route:list.  Есть там такой? Скорее всего нет...

Но если вы хотите такое имя, то надо добавить в определении роута ->name('/')

Например

Route::get('/','IndexController@index')->name('/');

#16 Re: Laravel 5.x » Изменение Request до отработки Controller » 10.02.2017 13:24:20

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

class CategoryRequest extends Request
.....

public function validate()
    {
        $this->ВашМетод();
        parent::validate();
    }


private function ВашМетод()
{
  if(empty($this->request->get('sysname'))) {
    $this->request->set('sysname', Slug::make($this->request->get('name'), '_'));
      // Ну или еще как...
    }
  }


public function rules()
    {
        return [
            'id_parent' => 'exists:categories,id',
            'name' => 'required',
            'sysname' => 'sysname|unique:categories,sysname,'.$this->route('categories'),
            'icon' => 'image'
        ];
    }

#17 Re: Laravel 5.x » Изменение Request до отработки Controller » 10.02.2017 13:02:43

Laravel 5.4
Request наследует FormRequest, который в свою очередь использует trait ValidatesWhenResolvedTrait там и есть пустой метод prepareForValidation

... Посмотрел 5.3 - тоже есть..

#18 Re: Laravel 5.x » Изменение Request до отработки Controller » 10.02.2017 12:31:20

Как вариант, переопределить метод prepareForValidation() в CategoryRequest

class CategoryRequest extends Request
.....

protected function prepareForValidation()
{
  if(empty($this->request->get('sysname'))) {
    $this->request->set('sysname', Slug::make($this->request->get('name'), '_'));
      // Ну или еще как...
    }
  }


public function rules()
    {
        return [
            'id_parent' => 'exists:categories,id',
            'name' => 'required',
            'sysname' => 'sysname|unique:categories,sysname,'.$this->route('categories'),
            'icon' => 'image'
        ];
    }

Т.е. получается, что перед валидацией проверяем, если пустой sysname, то вставляем значение, которое нужно.

Так будет точно работать, но... возможно, можно как-то и по другому...

#19 Re: Laravel 5.x » Как указать длинну столбца int в миграции? » 09.02.2017 15:59:27

Стоит отменить, что длина поля int влияет только на длину вывода этого поля при выбранном атрибуте ZEROFILL, а не на допустимое значение.
Мускулю без разницы, что ему указывают в этой длине. Что int(3), что int(10) Все равно можно записать любое число c максимальным значением 4,294,967,295

Поэтому вам не нужно там ничего указывать.
При выборе, обращайте внимание только на тип поля: int, smallint, tinyint и т.д

#20 Re: Laravel 5.x » Как указать длинну столбца int в миграции? » 09.02.2017 12:55:15

Mysql documentation
img

$table->increments('id') - это (integer, unsigned), что означает четырех-байтовое целое число, диапазон чисел от 0 до 4,294,967,295
И по умолчанию длина равна 10

#21 Re: Laravel 5.x » Import xml » 08.02.2017 10:56:14

Память для акселераторов PHP - 128 мб
--
1с пульнул на сервер import и offers c ~9 000 товарами. Правда xml-ники эти весят каждый по ~15мб. (У вас почему-то меньше)

Далее...

set_time_limit(0); // На всякий случай

$xml = simplexml_load_file(import/offers);

....

foreach ($xml->Каталог->Товары->Товар as $product) {
  
  $data['name'] = (string)$product->Наименование;
  ...
  
  Product::updateOrCreate(
    ['1c_id' => (string)$product->Ид],
    $data
  );

}

Полет нормальный...
--
Фиг знает, что будет с 50к товарами.

Если не прокатит, то можно попробовать порциями загружать.
Бежать по xml и хранить в сессии номер итерации.
Допустим, на 1000 итерации или по max_execution_time обрывать скрипт, запускать заново и вставлять записи в базу начиная с сохраненной итерации.

#22 Re: Laravel 5.x » Шаблоны и Route » 06.02.2017 22:53:04

Роуты тут не при чем.
Пересмотрите систему наследования.

return view('site');

Здесь вы показываете общий шаблон site, но site понятия ничего не имеет о header

Для того, что бы header показался, вам нужно показать наследника общего шаблона, а у вас это header

return view('header');

Так будет работать
--
Тем не менее, в конечном итоге, вы так делать не будете, т.к. header - это всего лишь кусок, который вы будете показывать в наследнике.
Еще раз почитайте про Blade Templates

#24 Re: Laravel 5.x » Почему не проходит post ajax 500 error » 27.01.2017 17:11:09

Route::post('/ajaxController', 'AjaxController@index');

В методе @index, возможно буква e или x в русской раскладке. Либо в самом контроллере в методе такая ошибка.  big_smile.
--
Не может быть такое? smile

#25 Re: Laravel 5.x » Почему в blade весь html уходит вверх » 27.01.2017 14:03:34

1. Разве после head может идти что-то отлично от body? Почему там стоит тег header?
Да и вообще, какая-то странная у вас структура наследования ))))

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