LINUX.ORG.RU

9
Всего сообщений: 50

Как работает onQueue() в очередях Laravel?

Что-то читаю документацию, и не могу понять.

При помещении задачи в очередь, можно через метод onQueue('queueName') указать текстовый идентификатор очереди. Но нигде не написано, где эти идентификаторы задаются/настраиваются.

Правильно ли я понимаю, что этот идентификатор задается произвольным образом, и нигде не нужно настраивать перечень доступных идентификаторов очередей?

 ,

Xintrea ()

Можно ли через очередь Laravel заблокировать отправку частых событий?

Laravel 5.5, очередь на MySQL.

В интерфейсе сайта есть кнопка «Тестовое сообщение». Когда она нажимается, должно запускаться определенное Job-действие, которое помещается в очередь.

Проблема в том, что нужно разрешить отправлять тестовое сообщение не более раз в 10 минут. Однако, когда действие в очереди успешно выполнилось, оно бесследно исчезает из очереди. И никак невозможно проверить, была ли за последние 10 минут отправка сообщения или нет.

Вопрос: есть ли возможность в очереди Laravel отслеживать по таким критериям отправку сообщений? Или нужно просто заводить таблицу, в которой хранить последний момент помещения действия в очередь и сравнивать с ним?

 ,

Xintrea ()

Как запустить Validator так, чтобы он повторно вызывал запрос со старыми данными?

Laravel 5.5

Для проверки ввода я пытаюсь использовать такой код:

public function addNotifyChannelApply(Request $request) {

  // Правила валидации
  $validator = Validator::make($request->all(), [
              'channelTypeId' => 'required|integer',
              'notifyChannelValue' => 'required|regex:/^(\d{4})$/',
          ]);

  // Дополнительная проверка
  $validator->after(function ($validator) use ($channelTypeId, $channelValue) {
    // Тут всякий проверяющий код            
  });
        
  // Запуск валидации на проверку
  $validator->validate();
  ...


Проблема в том, что валидатор, в случае обнаружения ошибок ввода, делает вызов предыдущего запроса, но не передает ему предыдущие Request данные. То есть old-данные передает, а вот именно предыдущие Request-данные не передает.

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

Вроде как можно использовать конструкцию withInput( Array ), но у инстанса объекта Validator нет такого метода. Поэтому попробовал вместо $validator->validate(); написать:

if ($validator->fails()) {
  return redirect()->back()->withInput($request->all());
}


Но и так, все равно, данные предыдущего Request не приходят в метод контроллера. Сижу и думаю, почему так.

(!) Единственное, что я заметил, так это то, что повторный запрос, генерируемый валидатором, почему-то приходит через метод GET. И у этого запроса, естественно, нет раздела Form Data, в котором были бы видны повторно передаваемые данные формы. Видимо из-за этого теряются переменные POST.

Начал искать, с какого перепугу Validator генерирует GET-запрос вместо POST, ничего не нахожу.

В общем, не получается у меня сделать так, чтобы Validetor генерировал правильный запрос со старыми данными. Как решить эту проблему?

 , ,

Xintrea ()

Почему пустая строка превращается в null в $request->input() в Laravel?

В контроллер поступают следующие данные:

POST Data
- channelTypeId «2»
- notifyChannelValue «»
- addButton «»

А вот код контроллера:

public function addChannelApply(Request $request) {
  $channelTypeId = $request->input('channelTypeId'); // Тут получается нормальное значение
  $channelValue = $request->input('notifyChannelValue'); // А тут null
    
  return dd($channelValue);
}


И этот контроллер выдает в браузер null.

Пытался задать вторым параметром input() значение по-умолчанию '12345'. Но оно не возвращается, видимо потому что POST-переменная таки существует, а значение по-умолчанию должно подставляется если переменной нет. То есть dd() все равно пишет null.

В то же время, метод input() должен возвращать null, если переменной нет. И, похоже, input() это и делает - он возвращает null.

В общем, я не могу понять, как получить значение POST-переменной notifyChannelValue в явном виде, то есть пустую строку?

 , , ,

Xintrea ()

Исключения и Laravel - не пойму

Не пойму, почему не работают исключения.

Пишу такой код:

try {
    $phone=UserChannels::where('user', Auth::user()->id)->where('channel_type', $phoneTypeId)->first()->value;
} catch (Exception $e) { 
    $phone='';
}


По идее, при любой ошибке он должен просто сделать $phone=".

Но вместо этого Laravel показывает ошибку на длинной строке:

ErrorException (E_NOTICE)
Trying to get property of non-object


Вопрос: почему Laravel ловит исключение, а не блок catch{} ?

 , , , ,

Xintrea ()

Laravel генерирует ошибку при обработке AJAX-запроса

Laravel 5.5

Пытаюсь запустить тестовый пример вот отсюда:

https://webformyself.com/laravel-ajax/

Но он не работает.

В логе веб-сервера вижу, что POST-запрос приходит. В браузере вижу, что Laravel попыталась обработать AJAX-запрос, но не смогла. Ответное сообщение приходит, но не с маленьким JSON-ответом, а с портянкой ошибки.

Судя по портянке, до контроллера выполнение не доходит, потому что нет никакого упоминания про AjaxController.php. То есть, что-то происходит в глубинах Laravel, но я не могу понять что.

Вопрос: как заставить работать этот пример?

Код ответного сообщения:

{
    "message": "",
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
    "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
    "line": 203,
    "trace": [
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php",
            "line": 175,
            "function": "prepareException",
            "class": "Illuminate\\Foundation\\Exceptions\\Handler",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/app/Exceptions/Handler.php",
            "line": 51,
            "function": "render",
            "class": "Illuminate\\Foundation\\Exceptions\\Handler",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 83,
            "function": "render",
            "class": "App\\Exceptions\\Handler",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 55,
            "function": "handleException",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php",
            "line": 49,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\View\\Middleware\\ShareErrorsFromSession",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php",
            "line": 63,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Session\\Middleware\\StartSession",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php",
            "line": 37,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php",
            "line": 66,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Cookie\\Middleware\\EncryptCookies",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 102,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 660,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 635,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 601,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 590,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 176,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 30,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/fideloper/proxy/src/TrustProxies.php",
            "line": 56,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Fideloper\\Proxy\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 30,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php",
            "line": 46,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 149,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php",
            "line": 53,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 102,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 151,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 116,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/media/wd_640_part_2/home64bit/xi/work/develop/php/tukituk/site/public/index.php",
            "line": 55,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        }
    ]
}

 , ,

Xintrea ()

Как ориентироваться в документации на Laravel API?

Использую Laravel 5.5

Мне надо посмотреть, например, что возвращает метод Модели create().

Саму модель я наследую от Illuminate\Database\Eloquent\Model, значит лезу в документацию вот сюда:

https://laravel.com/api/5.5/Illuminate/Database/Eloquent/Model.html

И метода create() я там не нахожу.

Вопрос: где искать описание этого метода?

 , ,

Xintrea ()

Веб-формы без кнопки Submit: как это нынче делается с Laravel/Vue/jQuery ?

Есть веб-форма без кнопки Submit. На ней есть текстовое поле.

Вопрос: как нынче организовывают сохранение значения, введенного в это поле?

Пока что вижу следующий примитивный путь:


  • Через jQuery вешается обработчик на текстовое поле на событие focusout;
  • В обработчике формируется AJAX-запрос через jQuery функцию $.ajax(), в запросе не забываю про csrf_token();
  • В Laravel делаю контроллер, который принимает Ajax данные, вычленяет из них переданное значение поля, сохраняет в базу;
  • Контроллер возвращает строку ошибки. Если пустая - ошибки нет, иначе на странице должно всплыть предупреждение что данные не могут сохраниться.


Следует ли делать так сохранение значения, или сейчас делают как-то по-другому? Через Vue вместо jQuery или еще как? В Laravel может есть готовые классы/механизмы для этого?

Дайте краткое описание и ссылки на доку/howto, желательно на русском.

 , ,

Xintrea ()

Как в Laravel получить из таблицы-справочника массив вида id=>name ?

Есть таблица, у которой есть поля id и name, ее содержимое, например, такое:

id name
1 name1
5 name5
7 name7


Есть ли какой-нибудь метод, чтобы одним махом получить ассоциативный массив вида:

[ 1=>'name1', 5=>'name5', 7=>'name7' ]


?

 , , , ,

Xintrea ()

Отправка писем из Laravel с помощью SMTP через yandex.ru

Для теста настроил в системе программу ssmtp, чтобы проверить как будет уходить почта через почтовый сервер yandex.ru. Настройки следующие:

root=***@yandex.ru
mailhub=smtp.yandex.ru:465
rewriteDomain=yandex.ru
hostname=yandex.ru
AuthUser=***
AuthPass=***
UseTLS=YES


И с этими настройками почта отправляется.

Теперь пробую использовать такие же настройки в Laravel. В файле .env прописано:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.yandex.ru
MAIL_PORT=465
MAIL_USERNAME=***
MAIL_PASSWORD=***
MAIL_ENCRYPTION=tls


Однако, при отправке почты происходит ошибка:

Swift_TransportException
Connection to tcp://smtp.yandex.ru:465 Timed Out


Я пробовал другие комбинации порта и шифрования, но они тоже не работают:

465, ssl:
Swift_TransportException (553)
Expected response code 250 but got code "553", with message "553 5.7.1 Sender address rejected: not owned by auth user. "

587, ssl:
Swift_TransportException
Connection could not be established with host smtp.yandex.ru [ #0]

587, tls:
Swift_TransportException (553)
Expected response code 250 but got code "553", with message "553 5.7.1 Sender address rejected: not owned by auth user. "


Вопрос. Как заставить работать почту в Laravel через smtp?


UPD: Еще я пробовал поставить такую настройку:

MAIL_DRIVER=mail


Все остальные значения MAIL_* приравнял null. Сделал я это
в надежде, что стработает PHP-шная функция mail(), которая у меня работает с помощью настроенного ssmtp. Например, такой код работает:

<?php 
mail("sample@gmail.com", "Отправка через SSMTP агента", "Это проверка отправки"); 
?>


Но после этой настройки и сброса кеша настроек:

$ ./artisan config:cache
Configuration cache cleared!
Configuration cached successfully!


Попытка отправки почты завершается ошибкой:

Swift_TransportException
Expected response code 220 but got an empty response

 , , , ,

Xintrea ()

Не получается использовать вид из подкаталога в Laravel 5.5

Имеются два вида, которые расположены так:

/resources/views/personalArea/userHoldObjects.blade.php
/resources/views/personalArea/userHoldObjects/userHoldObjectsBlock.blade.php


В вид userHoldObjects я пытаюсь подключить userHoldObjectsBlock.

Код вида userHoldObjects выглядит так:

@extends('personalArea.personalAreaTemplate')

@section('content')

    @include('userHoldObjects.userHoldObjectsBlock')

@endsection


Ошибка:

ErrorException (E_ERROR)
View [userHoldObjects.userHoldObjectsBlock] not found. (View: /home/xi/work/develop/php/tukituk/site/resources/views/personalArea/userHoldObjects.blade.php)

 , ,

Xintrea ()

Не получается использовать контроллер из подкаталога в Laravel 5.5

Что-то я совсем в пятницу вечером затупил.

Вот есть у меня контроллер который лежит по такому пути:

/app/Http/Controllers/MoveController.php


И я могу его использовать так:

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


Но мне нужно разместить этот контроллер в подкаталоге. Я перемещаю его в подкаталог personalArea:

/app/Http/Controllers/personalArea/MoveController.php


И пробую его использовать так:

Route::get('/home', 'personalArea\MoveController@index')->name('home');


И мне в ответ ошибка:

Class App\Http\Controllers\personalArea\MoveController does not exist


Я пробовал в качестве разделителя и "." и «/», но толку никакого. В чем проблема?

 , ,

Xintrea ()

Как включить локализацию для bonecms/laravel-captcha ?

Имеется пакет bonecms/laravel-captcha.

Его исходники вот тут: https://github.com/igoshev/laravel-captcha

Эта капча у меня наконец-то завелась, генерит картинки, выполняет проверку.

Осталось понять, как включить перевод сообщений об ошибках. В документации написано только, что нужно выполнить команду:

artisan vendor:publish --provider="Igoshev\Captcha\Providers\CaptchaServiceProvider" --tag="lang"


В результате работы этой команды появляются файлы:

/resources/lang/vendor/bone/en/captcha.php
/resources/lang/vendor/bone/ru/captcha.php
...


А дальше непонятно, что с ними делать. В настоящий момент сообщения об ошибках такие, которые прописаны в файле из каталога en. А как выводить сообщения на русском?

 , ,

Xintrea ()

Разломался пакетный менеджер после установки illuminate/htm в Laravel 5.5

Попытался сейчас установить пакет:

composer require illuminate/html


Его установка завершилась ошибкой:

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
 
In HtmlServiceProvider.php line 36:
 
  Call to undefined method Illuminate\Foundation\Application::bindShared()
 
Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1


У буржуев нашел такую информацию: https://stackoverflow.com/questions...d-illuminate-foundation-applicationbind...

Там говорят, что пакет разломан и нужно использовать пакет laravelcollective/html, но это говорят для Laravel v.5.1, а у меня v.5.5.

Ну ладно, решил удалить пакет illuminate/html, чтобы потом поставить laravelcollective/html. Но удаление пакета завершается ошибкой:

> composer remove illuminate/html
Package operations: 0 installs, 0 updates, 1 removal
  - Removing illuminate/html (v5.0.0)
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
 
In ProviderRepository.php line 208:
 
  Class 'Illuminate\Html\HtmlServiceProvider' not found
 
Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1


Если еще раз запустить эту же команду, снова будет та же ошибка. И теперь даже команда composer update тоже завершается такой же ошибкой. То есть, пакет вроде как удалился, но пакетный менеджер пытается дергать какие-то его несуществующие классы.

И что теперь делать? Как от этой ошибки избавиться?

 , ,

Xintrea ()

Laravel 5.5 и «Undefined variable: route» в виде

Пытаюсь заставить работать вот эту капчу:

https://github.com/igoshev/laravel-captcha

Если дать команду:

artisan vendor:publish --provider="Igoshev\Captcha\Providers\CaptchaServiceProvider" --tag="views"

То сгенерируется вид вот с таким содержмым:
<img src="{{ $route }}"
     alt="https://github.com/igoshev/laravel-captcha"
     style="cursor:pointer;width:{{ $width }}px;height:{{ $height }}px;"
     title="{{ $title }}"
     onclick="this.setAttribute('src','{{ $route }}?_='+Math.random());var captcha=document.getElementById('{{ $input_id }}');if(captcha){captcha.focus()}"
>

Если этот вид его вставить в другой вид через директиву:
@include('vendor.bone.captcha.image')

То при открытии страницы будет ошибка:
Undefined variable: route (View: /site/resources/views/vendor/bone/captcha/image.blade.php) (View: /site/resources/views/vendor/bone/captcha/image.blade.php)

То есть, в коде вида не хватает переменной $route. А куда она потерялась и почему ее нет?

Еще непонятно, почему в тексте ошибки один и тот же View два раза написан.

 ,

Xintrea ()

Какую выбрать капчу под Laravel 5.5?

Нужна готовая капча под Laravel. Что нужно:

1. Локальная работа на сервере, то есть reCaptcha не подходит

2. Умение искажать картинку: https://raw.githubusercontent.com/igoshev/laravel-captcha/master/examples/ima...

3. Иметь кнопку обновления.


Нашел капчу igoshev: https://github.com/igoshev/laravel-captcha
Картинки условие искажения удовлетвояют.
Но она глючная: https://github.com/igoshev/laravel-captcha/issues/36
И по описанию непонятно, есть ли в ней кнопка «обновить».


Еще нашел капчу mewebstudio: https://github.com/mewebstudio/captcha
Вроде все удовлетворяет, но не вижу опций искажения картинки. Защитные картинки в примерах как будто созданы для того, чтобы их распознавать примитивными методами.


Вопрос: какая капча под Laravel наиболее адекватная, неглючная, и удовлетворяет вышеперечисленным условиям?

 , ,

Xintrea ()

Компиляция CSS в Laravel и директива @import

У меня в _конце_ файла /resources/assets/sass/app.scss прописано:

// Различные стили для сайта
@import "./site.css";

А в скомпилированном файле содержимое файла site.css помещается почему-то в начале. И после него идет код Bootstrap, который, естественно, «портит» мои стили.

А как заставить размещать импорт стилей так, как они физически прописаны?

 , , ,

Xintrea ()

Обновление CSS в Laravel


Народ, а поясните за CSS, такая чехорда творится...

1. Подключаю я в /resources/assets/sass/app.scss через @import новый CSS-файл.

2. Запускаю компиляцию npm run dev

3. Проверяю файл /public/css/app.css, в нем есть новые CSS классы.

4. Обновляю страницу в Firefox - судя по внешнему виду, css обновилась раза с третьего... Ну хорошо что обновилось. Смотрю в сетевую консоль - там файл app.css приходит с кодом 200. Он соответствует тому что лежит на диске сервера. Вроде все хорошо.

5. Обновляю страницу в Cromium - css не обновляется. Смотрю в сетевую консоль - файл app.css приходит тоже с кодом 200, но его содержимое старое, без новых CSS-классов.

Это как так-то?

Laravel свежей установки 5.5.45, никаких кеширований не настраивал, все по дефолту. Работает через NGinx, в нем тоже минимальный конфиг.

 , ,

Xintrea ()

Centos 7 не загружается большие файлы

На сервере стоит Centos 7. Наш сайт разработана на Laravel. Сначала сайт был /var/www/html/sitename.ru. Но там память не хватило. Потом перемистили на папка /home/www/html здесь работает нормально, но не загружается большие файлы, размер файла 200 мегабайт. 10 мегабайтные файлы загружается нормально. php.ini ограничеие большие. На первом директория большие файлы загрузили, там не было проблема.

Вы знаете о чем проблема?

 ,

AkimBB ()

Backend-разработчик PHP(Laravel) + Go, Москва

Backend-разработчик PHP(Laravel) + Go Зарплата: от 140000 до 200000 “на руки”, устанавливается на собеседовании с успешным кандидатом.

Описание: Команда телемедицинского сервиса-стартапа iBolit с радостью примет в свои ряды ,бэкенд-разработчика с хорошим знанием php-фреймворка Laravel и, желательно, с опытом разработки сервисов на Golang. Команда iBolit занимается разработкой Web-портала и мобильных приложений (iOS / Android), помогающих врачам и их пациентам быть на связи в любой точке мира. В марте 2018 г. была запущена первая MVP-версия продукта, и в настоящее время проект находится на стадии бурного роста. Уже более 40000 пациентов воспользовались сервисами платформы. У нас небольшая, но опытная команда. За плечами нашего CEO есть успешный проект Checkout (куплен Avito в 2015 году). Мы хотим найти не только высококлассного разработчика, но и единомышленника, разделяющего цель нашего проекта - дать возможность пациентам получить качественную медицинскую помощь вне зависимости от точки на карте, где они находятся.

В вашей зоне ответственности будет разработка сервисов платформы, API, административных интерфейсов на языках PHP (фреймворк Laravel) и Golang.

От вас потребуются отличные знания PHP 7.x и фреймворка Laravel, очень желателен опыт разработки микросервисов на Go, а также хорошие навыки использования реляционных (MySQL/Postgres) и NoSQL баз данных, навыки написания модульных тестов и интеграции их с CI-инструментами (TeamCity).

Ждем ваше резюме на почту HR.job.KAA@gmail.com

 , , , ,

HR_Anna ()