Laravel по-русски

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

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

#1 Re: Laravel 5.x » Не могу получить Request данные через https » 30.12.2018 08:32:31

P.S. не знаю зачем ты вообще сделал ?/$1для роутинга Laravel подставлять путь в гет-параметры не нужно.

Вы правы. Вот рабочий вариант public/.htaccess Проблема решена. Всем спасибо.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{HTTPS} !on
    RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # ReWriteCond %{SERVER_PORT} !^443$ 
    # RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

</IfModule>

#2 Re: Laravel 5.x » Не могу получить Request данные через https » 30.12.2018 07:04:55

На VDS установлен LAMPP. В бою 3 проекта без ssl и 1 dev-проект c ssl
443 порт открыт.
Для dev-проекта c ssl применяются 2 конфига virtual host: для 80 и 443 портов соответственно.
:80

 
<VirtualHost *:80>
    ServerAdmin djangarku@gmail.com
    ServerName dev.site.ru
    ServerAlias [url=http://www.dev.site.ru]www.dev.site.ru[/url]
    DocumentRoot /var/www/dev.site.ru/public
        <Directory "/var/www/dev.site.ru/public">`
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
    ErrorLog /var/www/dev.site.ru/error.log
    CustomLog /var/www/dev.site.ru/access.log combined
</VirtualHost>

:443

<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerName dev.site.ru
                ServerAlias [url=http://www.dev.site.ru]www.dev.site.ru[/url]
                ServerAdmin djangarku@gmail.com

                DocumentRoot /var/www/dev.site.ru/public
                <Directory "/var/www/dev.site.ru/public">`
                        Options Indexes FollowSymLinks MultiViews
                        AllowOverride All
                        Order allow,deny
                        allow from all
                </Directory>

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined

                SSLEngine on
                SSLCertificateFile      /etc/ssl/dev.site.ru/certificate.crt
                SSLCertificateKeyFile /etc/ssl/dev.site.ru/private.key
                SSLCertificateChainFile /etc/ssl/dev.site.ru/ca_bundle.crt

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
        </VirtualHost>
</IfModule>

public/.htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTPS} !on
    RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    # ReWriteCond %{SERVER_PORT} !^443$ 
    # RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>

Все формы, передающие данные методом POST работают нормально, а вот GET-запросы вообще не исполняются по всему проекту (dev ssl).
Применяется Laravel 5.3

#3 Laravel 5.x » Не могу получить Request данные через https » 29.12.2018 17:57:45

Dzhangar
Ответов: 6

Всем доброго времени суток.
Вчера на https://www.sslforfree.com сгенерил для dev-версии сайта халявные сертификаты. Их установка на VDS и настройка apache прошла без проблем.
Сайт заработал через https, правда пришлось с ресурсами повозиться... пути исправить, а то браузер ругался на смешанный контент...
Далее я продолжил проверку работы сайта на https-протоколе и спотЫкнулся на ровном месте... при попытки передать данные методом GET через ссылку, например: https://dev.site.ru/home/article?id=13

dd($request->all());

выдает

array:1 [▼
  "/home/article" => null
]

.... и чем я его только не пробовал.... и дядя Гугл не помогает... печалька вообще.:(

#4 Re: Laravel 5.x » Не могу получить Auth::user в unisharp.github.io/laravel-filemanager » 06.12.2018 10:17:05

:-) я сам дурак

Возвращает null.... хотя запрос идет из авторизованной зоны

Все дело в неправильно расположенных роутах. Хоть lfm и имеет

Route::group(['prefix' => 'laravel-filemanager', 'middleware' => ['web', 'auth']], function () {
     \UniSharp\LaravelFilemanager\Lfm::routes();
 });

все равно надо чтобы запрос был из Auth-зоны, например, со страницы home-зоны

Route::group(['prefix' => 'home', 'middleware' => ['web', 'auth']], function () {
    Route::get('/', 'HomeController@index')->name('home');
    include 'home.php';
 });

#5 Laravel 5.x » Не могу получить Auth::user в unisharp.github.io/laravel-filemanager » 04.12.2018 13:15:31

Dzhangar
Ответов: 1

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

Файловый менеджер unisharp.github.io/laravel-filemanager для сайта какой-то багнутый....
Сначала composer закачал не все файлы, пришлось доливать руками...
Теперь не могу получить экземпляр пользователя для многопользовательского использования этого чуда мысли...
config/lfm.php

...
'user_folder_name'         => UniSharp\LaravelFilemanager\Handlers\ConfigHandler::class,
...

UniSharp\LaravelFilemanager\Handlers\ConfigHandler

<?php

namespace UniSharp\LaravelFilemanager\Handlers;

class ConfigHandler
{
    public function userField()
    {
        return auth()->user()->id;
    }
}

Дает ErrorException (E_NOTICE) Trying to get property of non-object

Попытка переопределить класс ни к чему не приводит, например:
config/lfm.php

'user_folder_name'         => App\Handlers\LfmConfigHandler::class,

App\Handlers\LfmConfigHandler

<?php

namespace App\Handlers;

use Auth;

class LfmConfigHandler extends \UniSharp\LaravelFilemanager\Handlers\ConfigHandler
{
    public function userField()
    {
        if (Auth::check())
        {
            if(Auth::user()->role === 'Admin'){
                    return '/';
            }else{
                    return '/' . auth()->id();        	
            }
        }else{
            return null;
        }
    }
}

Возвращает null.... хотя запрос идет из авторизованной зоны

#6 Re: Laravel 5.x » Публичные вебинары с участием как гостей, так и юзеров » 01.07.2018 02:20:27

$500 предоплаты, потом поговорим.

У вас хороший аппетит!... smile

Если вы еще не поняли - система уже спроектирована и частью реализована. Реализованы закрытые вебинары (только для Юзеров).
На их основе пишутся публичные вебинары с участием как гостей так и зарегистрированных пользователей...

Чего ради пост?! Интересны мнения профи о других вариантах реализации... Не надо деталей. Достаточно тезисно высказаться.
big_smile $500... дешево берете

#7 Laravel 5.x » Публичные вебинары с участием как гостей, так и юзеров » 30.06.2018 19:09:40

Dzhangar
Ответов: 2

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

Напишите ваши мысли о реализации данной задачи на базе laravel 5 + WSS Ratchet.

Исходные:
1. Юзеры (имеют соответственно записи в таблице Users) логически разделены на роли: Админ, Спикер, Партнер. Все имеют доступ в Кабинет (Midleware Auth)
2. Гости (имеют записи в таблице webinar_listeners) приходят из "дикого веба" и заходят в вебинар через паблик...по логин/паролю (данные заявок на участие в вебинаре)
3. Админ создает вебинар, задает техпараметры как то: url и ключ стрима..., устанавливает перечень спикеров (из списка юзеров)
4. Партнеры - это Юзеры, которые могут свободно посетить вебинар по ссылке из Кабинета.
5. Спикеры в обязательном порядке заходят вебинар по ссылке из Кабинета.
6. Сама вебинарная комната расположена в паблик зоне (Without midleware Auth).
7. При входе в вебинар-комнату все его участники должны сводиться к единому знаменателю.
При этом планируется использовать Cookie для хранения авторизоционных данных на стороне клиента.
Например, member['role'], member['name']...
8. Время жизни вебинара 2-3 часа.

Вопрос: Ваши варианты и комментарии?

#9 Re: Laravel 5.x » Запуск Websocket server (Ratchet) из Supervisor » 31.05.2018 23:19:34

Решение!

[program:wss-worker]
process_name=%(program_name)s_%(process_num)02d
command=php artisan chatserver:run
directory=/var/www/site.ru
autostart=true
autorestart=true
user=some_user
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/site.ru/app/worker.log

numprocs=8 во многом избыточно, думаю хватило бы и numprocs=1 …потестю-посмотрю

#10 Re: Laravel 5.x » Изменение данных пользователя » 31.05.2018 19:16:31

Попробуй принять заявку на смену логина/мыла, затем выкинь юзера в паблик /деавторизуй его/, меняй его логин/мыло и авторизуй заново с новым логином/мылом

#11 Laravel 5.x » Запуск Websocket server (Ratchet) из Supervisor » 31.05.2018 19:11:04

Dzhangar
Ответов: 1

Доброго времени суток!
Пытаюсь переложить задачу поддержания wss в работающем состоянии с помощью Supervisor.
Добавил конфиг wss-worker.conf

PHP
[program:wss-worker]
process_name=%(program_name)s_%(process_num)02d
command
=php /var/www/site/artisan chatserver:run --sleep=--tries=--daemon
autostart
=true
autorestart
=true
user
=some_user
numprocs
=8
redirect_stderr
=true
stdout_logfile
=/var/www/site/app/worker.log

Выполнил reread, update, start wss-worker:*
wss-worker:wss-worker_06: ERROR (spawn error)
wss-worker:wss-worker_07: ERROR (spawn error)
wss-worker:wss-worker_04: ERROR (spawn error)
wss-worker:wss-worker_05: ERROR (spawn error)
wss-worker:wss-worker_02: ERROR (spawn error)
wss-worker:wss-worker_03: ERROR (spawn error)
wss-worker:wss-worker_01: ERROR (spawn error)
wss-worker:wss-worker_00: ERROR (spawn error)

и в логе обнаруживаю ошибки:
[Symfony\Component\Console\Exception\RuntimeException]
The "--sleep" option does not exist.

С опциями игрался и так-сяк… кто подскажет где я неправ?

#12 Re: Laravel 5.x » Auth::user() возвращает левого пользователя (последнего по БД) » 17.04.2018 15:18:50

FrDR, bingo!
Конечно жжжжешь foreach!
Как иногда ломает выдумывать новые имена переменных.... от-того и  накладки.
Спасибо всем за участие.

#13 Re: Laravel 5.x » Auth::user() возвращает левого пользователя (последнего по БД) » 17.04.2018 14:45:29

Это все прекрасно, НО:
1. В остальных blade шаблонах, в т.ч. и в include() данное обращение ( {{ $user->profile->declarer_name }} ) отрабатывает нормально.
Даже в рамках этого же роута, но в другом blade шаблоне, адекватно.
2. Если б сессия была б недоступна на момент $user = Auth::user(), вернуло бы null, но никак не крайнего по ID.

Ни переименование переменной, ни применение ленивой ее загрузки не помогло.

#14 Re: Laravel 5.x » Auth::user() возвращает левого пользователя (последнего по БД) » 15.04.2018 16:32:26

ProfileComposer

PHP
<?php namespace App\Http\ViewComposers;

use 
Illuminate\Contracts\View\View;
use 
App\Repositories\UserRepository as UserRepository;

class 
ProfileComposer {

    protected 
$users;

    public function 
__construct(UserRepository $users)
    {
        
// Зависимости разрешаются автоматически службой контейнера...
        
$this->users $users;
    }

    public function 
compose(View $view)
    {
        ...
        
$view->with('user'$this->users->getUser());
        ...
    }
}

UserRepository

PHP
<?php
namespace App\Repositories;

use 
App\User;
use 
App\Profile;
use 
App\Contract;
use 
App\Good;
use 
App\Abonement;
use 
Auth;

class 
UserRepository {

    protected 
$user;
    ...
    function 
__construct() {
        
$this->user Auth::user();
        ...
    }
    ...

    public function 
getUser(){
        return 
$this->user;
    }
    ...
}

webinar.blade.php

PHP
...
<
h4>{{ $user->profile->declarer_name }}</h4>
<!-- 
возвращает $user c последним ID -->
...

#15 Laravel 5.x » Auth::user() возвращает левого пользователя (последнего по БД) » 14.04.2018 22:56:04

Dzhangar
Ответов: 10

Всем доброго времени суток
Неожиданно увидел, что на одной из страниц Auth::user() возвращает мне не текущего пользователя, а последнего в таблице Users
В странице нет ничего - простая выгрузка контента.
Функция Контроллера также никак не влияет на фасад Auth.
В ViewComposer заведена $user = Auth::user(); для использования в видах.... в общем ничего необычного. И тут на тебе - левый юзер вылезает...
У кого какие мысли где капать?

#16 Re: Laravel 5.x » Repositories » 06.01.2018 21:56:56

по мне так просто при получении null просто редиректить на 404

#17 Re: Вакансии » Торговая площадка и каталог, перевозки » 25.11.2017 01:13:37

Как делал с «0» сайт для сетевого маркетинга с их рейтингами, отношениями партнер-спонсор, платным контентом, системой уведобмлений как на сайте, так и на мыло, прием банккарточек… запотел на полгода!
Так, что лучше найти команду разрабов — и время меньше уйдет и качество выше будет.

#18 Re: Вакансии » Laravel developer [Удаленка] » 13.11.2017 20:17:59

djangarku@gmail.com
2 года разработки на laravel 4-5
Стек: php, mysql, linux, js, jq, html5, css3, bootstrap, laravel/lumen, joomla, git

#20 Laravel 5.x » Как убрать дублирование в модели Eloquent принимаемой через Ajax » 24.10.2017 20:10:09

Dzhangar
Ответов: 1

На стороне сервера

PHP
public function getEventsByDate(Request $request){
        
$user Auth::user();
        
$dateEvents $request->input('dateEvents');

        
$events Contact_Event::where('datetime''like'$dateEvents.'%')->
                    
whereHas('contact', function ($query) use ($user) {
                        
$query->where('user_id''='$user->id);
                    })->
get();

        if(
count($events)>0){
            return 
Response::json($events->toJson());
        }else{
            return 
Response::json('no_events');
        }
    }

На стороне клиента

PHP
function showDateEvents(DateEvents){
    var 
year String(DateEvents.getFullYear());
    var 
mounth String(Number(DateEvents.getMonth())+1);
    var 
day String(DateEvents.getDate());

    if(
mounth.length 2){
        
mounth "0" mounth;
    }
    if(
day.length 2){
        
day "0" day;
    }
    var 
date year +'-'mounth +'-'day;
    
//console.log(date);
    
var token  = $('meta[name=_token]').attr('content');
    $.
ajaxSetup({ headers: { 'X-CSRF-TOKEN'token }});
    var 
mydata = {};
    
mydata['_token'] = token;
    
mydata['dateEvents'] = date;
    $.
ajax({
        
method"POST",
        
url"./get_events_by_date",
        
cachefalse,
        
datamydata,
        
dataType'json',
        
success: function (response) {
                    
console.log(response);
                    if(
response == 'no_events'){
                        $(
'#events').html('<h4>Дата свободна</h4>');
                        $(
'#events').show();
                    }else{
                        
console.log(response);
                    }
        },
        
error: function (data) {
                    
console.log('Error:'data);
                }
        });
}
...

$( 
document ).ready(function() {
    
console.log"ready!" );
    var 
date = new Date($('#datetimepicker').data("DateTimePicker").date()._d);
    
showDateEvents(date);
});

console:

PHP
ready!
schedule:801 [{"id":2,"contact_id":7,"theme":"\u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c...","datetime":"2017-10-24 18:37:04"}]
schedule:806 [{"id":2,"contact_id":7,"theme":"\u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c...","datetime":"2017-10-24 18:37:04"}]

Как видно из лога сервер возвращает одно и тоже значение 2 раза.
Это как-то взязано с Eloquent’s model? Как убрать дублирующие значения?

#21 Re: Laravel 5.x » Прием http-уведомлений от Яндекс.Деньги » 14.08.2017 23:08:53

А ларчик то просто открывается…
Наш любимый защитник VerifyCsrfToken блочит всех и вся,

Откройте посредник VerifyCsrfToken и добавьте исключения к роуту

PHP
<?php

namespace App\Http\Middleware;

use 
Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class 
VerifyCsrfToken extends BaseVerifier
{
    
/**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    
protected $except = [
        
//
        
'receive',
        
'receive/*',
    ];
}

#22 Re: Laravel 5.x » Мультидомены на ларавеле » 14.08.2017 20:00:07

Для примера, я пускаю юзеров только на те поддомены, которые соответствуют с уже имещимся аккаунтам…

PHP
Route::group(['domain' => '{account}.site.dev'], function () {
        
Route::get('/', function ($account) {
            
$server explode('.'Request::server('HTTP_HOST'));
            
$profile App\Profile::where('company_login''='$account)->first();

            if(
$profile == Null){
                return 
redirect('http://'.$server[1].'.'.$server[2]);
            }else{
                return 
view('welcome');
            }
        });
});

#23 Laravel 5.x » Прием http-уведомлений от Яндекс.Деньги » 14.08.2017 18:28:26

Dzhangar
Ответов: 1

Всем горячие приветы!

Согласно мануалам от Яндекс сервис Яндекс.Деньги отправляет http-запрос при пополнении кошелька на указанный адрес… подробно можно почитать, например, здесь https://learn.dkrylov.com/articles/php/poshagovaja-nastrojka-jandeks-dengi-s-http-uvedomlenijami_9

Я добавил роут в web.php
Route::post(’receive’, ’MoneyController@yandexReceive’)->name(’receive’);

Обработчик должен принять уведомлялку и сохранить в БД

PHP
<?php

namespace App\Http\Controllers;

use 
App\Http\Controllers\Controller;
use 
Illuminate\Http\Request;
use 
App\Payment;
use 
App\Log;

class 
MoneyController extends Controller
{

    public function 
yandexReceive(Request $request){
        
$test_notification false;

        if (
$request->has('test_notification')) {
            
$test_notification $request->input('test_notification');
        }

        
$log = new Log;
        
$log->data $test_notification;
        
$log->save();
    }
}

При отсылке тестового уведомления — результат 0.

Далее я сделал простую форму на локальном сервере для отсылки пост-запроса

PHP
<form method="post" action="http://site.ru/receive" enctype="application/x-www-form-urlencoded">
    <
input type="hidden" name="test_notification" value="true">
    <
input type="submit" value="Go!">
</
form>

И что же? У меня открывается не запрошенная страница, а главная!
Где капать? Что курить? Подскажите!

#24 Re: Laravel 5.x » Мультидомены на ларавеле » 14.08.2017 18:14:48

Я реализовал поддомены так:
/etc/hosts
127.0.0.1    site.dev
127.0.0.1    *.site.dev

/etc/apache2/sites-available/site.dev.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName site.dev
    ServerAlias *.site.dev
    DocumentRoot /var/www/site/public
    <Directory "/var/www/site/public">`
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

/var/www/site/public/.htaccess
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

Т.о. при заходе на поддомен subdomain.site.dev можно выхватить
$server = explode('.', $request->server('HTTP_HOST'));
if(count($server) > 2){
// юзер зашел на поддомен
$subdomain =  $server[0];
}

Как-то так....

#25 Laravel » talvbansal/media-manager показывает мета-данные » 10.08.2017 18:00:56

Dzhangar
Ответов: 0

Всем доброго времени суток

Помогите разобраться с проблемой.
В составе админки сайта использовал https://github.com/talvbansal/media-manager
для управления файлами.
На локальном сервере (ubuntu 16 lts desctop) все работает адекватно - папки создаются, открываются, файлы заливаются...
Однако на VDS (ubuntu 16 server) вместо файлов-папок выходят их мета-данные...папки создаются, но не открываются, файлы не заливаются - 500 ошибка.
Права и владельца прописал...

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