Laravel по-русски

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

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

#1 Re: Laravel 5.x » Почему по-разному работают отложенные задачи? » 11.06.2019 01:38:57

Какой у вас менеджер очередей в в config/queue стоит, например?

    'default' => env('QUEUE_CONNECTION', 'sync'),

и в .env тоже посмотрите.

#3 Re: Laravel 5.x » Связи таблиц » 06.06.2019 09:50:26

А что вы ожидаете? find принимает на вход число (айди). А вы передаете массив. Ссылку на документацию апи посмотрите

#4 Re: Laravel 5.x » Не отправляется mail » 06.06.2019 09:46:48

Authentication required

MAIL_USERNAME=null
MAIL_PASSWORD=null

У вас же конкретная ошибка, ошибка аутентификации. Пропишите параметры пользователя.

#5 Re: Laravel 5.x » Подключение платежных систем » 03.06.2019 10:10:04

В настройках ЯМ все прописал, тестовое сообщение уходит на нужный адрес.

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

#6 Re: Laravel 5.x » Проверка аутентификации в роуте или конструкторе контроллера » 03.06.2019 09:35:53

Остается вопрос с простынями роутов

Для crud Resource Controllers. Первые абзацы описание, в таблице  обьяснения как сопоставляются роуты с именами методов и типами запросов.

#7 Re: Laravel 5.x » Защита роутов через middleware или что-то другое » 02.06.2019 23:15:11

Я не знаю как у вас реализован роут, но в middleware можно достать все что нужно через $request (Illuminate\Http\Request)

public function handle(Request $request, Closure $next) {
$journal = $request->route('journal');
}

#8 Re: Laravel 5.x » Проверка аутентификации в роуте или конструкторе контроллера » 02.06.2019 23:07:48

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

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

#11 Re: Laravel 5.x » Редирект при авторизации » 23.05.2019 13:16:14

Выдержка из документации.

Next, you should modify the RedirectIfAuthenticated middleware's handle method to use your new URI when redirecting the user.

#12 Re: Laravel 5.x » Подключение платежных систем » 21.05.2019 19:42:01

Пока хотел записать данные в файл, но будет запись в БД.

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

А чем не устроило запись в лог?

#13 Re: Laravel 5.x » Подключение платежных систем » 21.05.2019 16:25:34

public function payment(Request $request)

Вы для чего используете этот метод? Если для пуша, то я не совсем понимаю что вы делаете в вашем коде.

#14 Re: Laravel 5.x » Админка в Laravel » 21.05.2019 14:28:25

В свое время смотрел в сторону voyager, но так и не добрался.

#15 Re: Laravel 5.x » Как обьединить несколько where в одно условие ? » 20.05.2019 23:30:52

->where(function ($query) use ($lessonType) {
                $query->where('Active', 1)
                      ->where('ct.CriterionType', $lessonType);
            })
->orWhere(function ($query) {
                $query->where('Active', 1)
                      ->where('ct.CriterionType', UserLessonRateEnum::TYPE_ALL);
            })

Попробуйте так.

->get()
->toArray();

Не самая лучшая идея. Нет лимита выборки и преобразование в array. Ситуационно конечно, но лучше избегать такой последовательности.

#16 Re: Laravel 5.x » Подключение платежных систем » 20.05.2019 17:16:44

Смотрите в сторону push-настроек на стороне платежных систем. С вашей стороны нужно подготовить урл куда будет стучаться платежка. Под каждую систему свой урл. И сразу подготовьте консольную команду для ручной проверки платежа по его идентификатору. Из опыта скажу, будете пользоваться чуть чаще чем всегда). Урлы должны быть закрыты за https.

#17 Re: Laravel 5.x » Подключение платежных систем » 20.05.2019 11:34:09

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

У вас есть код формы . Создаете контроллер и кладете этот код в вью котроллера например. Покажите что вы делали, как минимум, и что не получилось.

#18 Re: Laravel 5.x » Очистка кеша Laravel 5.8 » 20.05.2019 11:29:04

И я бы на вашем месте посмотрел в сторону laravel-mix c версионированием

if (mix.inProduction()) {
    mix.version();
}

#19 Re: Laravel 5.x » Подключение node_modules в Laravel 5.8 » 19.05.2019 22:13:27

Все ваши скрипты должны лежать в public. Вам нужно отредактировать webpack.mix.js. Почитайте документацию, подробности здесь.

#20 Re: Laravel 5.x » Передача пароли юзеров из вордпресса в ларавел » 19.05.2019 20:57:35

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

Для пароля вам потребуется реализовать своей хешер. Для этого наследуйтесь от  \Illuminate\Contracts\Hashing\Hasher.

Выдернул из проекта. Надеюсь разберетесь.

namespace App\Engine;

use App\Http\Engine;
use Illuminate\Support\Str;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Contracts\Hashing\Hasher as HasherContract;
use Illuminate\Contracts\Auth\Authenticatable as UserContract;

class SageUserProvider implements UserProvider
{
    /**
     * The hasher implementation.
     *
     * @var \Illuminate\Contracts\Hashing\Hasher
     */
    protected $hasher;

    /**
     * The Eloquent user model.
     *
     * @var string
     */
    protected $model;

    /**
     * Create a new database user provider.
     *
     * @param  \Illuminate\Foundation\Application $app
     */
    public function __construct($app)
    {
        $this->model = array_get($app['config'], 'auth.providers.sage.model');
        $this->hasher = $app['hash'];
    }

    /**
     * Retrieve a user by their unique identifier.
     *
     * @param  mixed  $identifier
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveById($identifier)
    {
        //parser identifier
        $parts = explode("_", $identifier);
        $model = $this->createModel();

        return $model->newQuery()
            ->where("CodigoEmpresa", $parts[0])
            ->where('CodigoComisionista', $parts[1])
            ->first();
    }

    /**
     * Retrieve a user by their unique identifier and "remember me" token.
     *
     * @param  mixed  $identifier
     * @param  string  $token
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveByToken($identifier, $token)
    {
        $parts = explode("_", $identifier);
        $model = $this->createModel();

        return $model->newQuery()
            ->where("CodigoEmpresa", $parts[0])
            ->where('CodigoComisionista', $parts[1])
            ->where($model->getRememberTokenName(), $token)
            ->first();
    }

    /**
     * Update the "remember me" token for the given user in storage.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  string  $token
     * @return void
     */
    public function updateRememberToken(UserContract $user, $token)
    {
        \Log::info('updateRememberToken');

        $user->setRememberToken($token);

        $user->save();
    }

    /**
     * Retrieve a user by the given credentials.
     *
     * @param  array  $credentials
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     */
    public function retrieveByCredentials(array $credentials)
    {
        if (empty($credentials)) {
            return;
        }

        // First we will add each credential element to the query as a where clause.
        // Then we can execute the query and, if we found a user, return it in a
        // Eloquent User "model" that will be utilized by the Guard instances.
        $query = $this->createModel()->newQuery();

        foreach ($credentials as $key => $value) {
            if (! Str::contains($key, 'password')) {
                $query->where($key, $value);
            }
        }
        //$query->where('CodigoEmpresa', Engine::$empresa);

        return $query->first();
    }

    /**
     * Validate a user against the given credentials.
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable  $user
     * @param  array  $credentials
     * @return bool
     */
    public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        return $this->hasher->check($plain, $user->getAuthPassword());
    }

    /**
     * Create a new instance of the model.
     *
     * @return \Illuminate\Database\Eloquent\Model
     */
    public function createModel()
    {
        $class = '\\'.ltrim($this->model, '\\');

        return new $class;
    }

    /**
     * Gets the hasher implementation.
     *
     * @return \Illuminate\Contracts\Hashing\Hasher
     */
    public function getHasher()
    {
        return $this->hasher;
    }

    /**
     * Sets the hasher implementation.
     *
     * @param  \Illuminate\Contracts\Hashing\Hasher  $hasher
     * @return $this
     */
    public function setHasher(HasherContract $hasher)
    {
        $this->hasher = $hasher;

        return $this;
    }

    /**
     * Gets the name of the Eloquent user model.
     *
     * @return string
     */
    public function getModel()
    {
        return $this->model;
    }

    /**
     * Sets the name of the Eloquent user model.
     *
     * @param  string  $model
     * @return $this
     */
    public function setModel($model)
    {
        $this->model = $model;

        return $this;
    }
}
namespace app\Hashing;

use Illuminate\Contracts\Hashing\Hasher as HasherContract;

class Md5CryptHasher implements HasherContract
{

    /**
     * Hash the given value.
     *
     * @param  string $value
     * @param  array $options
     * @return string
     */
    public function make($value, array $options = [])
    {
        return $value;
    }

    /**
     * Check the given plain value against a hash.
     *
     * @param  string $value
     * @param  string $hashedValue
     * @param  array $options
     * @return bool
     */
    public function check($value, $hashedValue, array $options = [])
    {
        return $value == $hashedValue;
    }

    /**
     * Check if the given hash has been hashed using the given options.
     *
     * @param  string $hashedValue
     * @param  array $options
     * @return bool
     */
    public function needsRehash($hashedValue, array $options = [])
    {
        return false;
    }
}
namespace App\Hashing;

use Illuminate\Support\ServiceProvider;

class Md5HashServiceProvider extends ServiceProvider
{
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = true;

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('hash', function() {
            return new Md5CryptHasher;
        });
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return ['hash'];
    }
}

#21 Re: Laravel 5.x » Ошибка базы SQLSTATE[42S02] » 18.05.2019 23:33:30

У вас же написано, что таблица 'apidev.orders' не существует. А в миграции имя таблицы 'order' без  's'. Добавьте в модель

class Order extends Model
{
    protected $table = 'order';
    protected $fillable = ['title'];
} 

Выдержка из документации

Table Names
Note that we did not tell Eloquent which table to use for our Flight model. By convention, the "snake case", plural name of the class will be used as the table name unless another name is explicitly specified. So, in this case, Eloquent will assume the Flight model stores records in the flights table. You may specify a custom table by defining a table property on your model:

#22 Re: Laravel 5.x » Подключение платежных систем » 16.05.2019 10:02:15

Начните с документации. У всех выше названых провайдеров информации достаточно. Самая простая схема, это заполнение формы на вашем сайте и отправка в шлюз платежной системы, оттуда редирект на платежную форму и после оплаты возврат на указанную страницу вашего сайта. Опционально есть опция пуша, для информирования о состоянии платежа.

#23 Re: Laravel 5.x » Как удалить относящиеся уведомления к посту, при его удалении? » 14.05.2019 17:55:24

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

Только если в миграции вы указали "->onDelete('cascade');". Если вкратце связи нужны для обеспечения целостности самих данных, оптимизации запросов со стороны бд и тд.

Это собственно и ответ для первого поста. В миграции уведомлений делаете форейгн кей. Вот вам пример

$table->foreign('app_id')->references('id')->on('apps')->onDelete('cascade');

#25 Re: Laravel 5.x » Какие существуют хорошие практики для выноса статических данных? » 02.08.2018 17:22:53

Профит близится к нулю. Редактировать тонну файлов для ваших данных утомительно. Продумайте структуру таблиц и храните в бд. В любом удобно для вас формате, желательно с возможностью поиска средствами sql для удобства. Дальше делайте свой провайдер (варианты реализаций десятки) на ваше усмотрение и инстаируете его в ларавел. И работаете с ним через DI. Можете сливать все из бд в некую структуру в файл и положить в кеш. Для вьюх делаете обертку в виде хелпера который так же работает с этим ди.

Перфекционизм это хорошо, но балансируйте между временем на разработку и времени на поддержку. То что вы предлагаете предполагает огромные затраты на поддержку, особенно фронтэнда. Здравый подход и оценка возможностей. Желаю удачи.

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