Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
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>
На 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
Всем доброго времени суток.
Вчера на 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
]
.... и чем я его только не пробовал.... и дядя Гугл не помогает... печалька вообще.:(
:-) я сам дурак
Возвращает 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';
});
Доброго времени суток!
Файловый менеджер 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.... хотя запрос идет из авторизованной зоны
$500 предоплаты, потом поговорим.
У вас хороший аппетит!...
Если вы еще не поняли - система уже спроектирована и частью реализована. Реализованы закрытые вебинары (только для Юзеров).
На их основе пишутся публичные вебинары с участием как гостей так и зарегистрированных пользователей...
Чего ради пост?! Интересны мнения профи о других вариантах реализации... Не надо деталей. Достаточно тезисно высказаться.
$500... дешево берете
Доброго времени суток!
Напишите ваши мысли о реализации данной задачи на базе 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 часа.
Вопрос: Ваши варианты и комментарии?
code, please
[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 …потестю-посмотрю
Доброго времени суток!
Пытаюсь переложить задачу поддержания wss в работающем состоянии с помощью Supervisor.
Добавил конфиг wss-worker.conf
[program:wss-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/site/artisan chatserver:run --sleep=3 --tries=3 --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.
FrDR, bingo!
Конечно жжжжешь foreach!
Как иногда ломает выдумывать новые имена переменных.... от-того и накладки.
Спасибо всем за участие.
Это все прекрасно, НО:
1. В остальных blade шаблонах, в т.ч. и в include() данное обращение ( {{ $user->profile->declarer_name }} ) отрабатывает нормально.
Даже в рамках этого же роута, но в другом blade шаблоне, адекватно.
2. Если б сессия была б недоступна на момент $user = Auth::user(), вернуло бы null, но никак не крайнего по ID.
Ни переименование переменной, ни применение ленивой ее загрузки не помогло.
<?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());
...
}
}
<?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;
}
...
}
...
<h4>{{ $user->profile->declarer_name }}</h4>
<!-- возвращает $user c последним ID -->
...
Всем доброго времени суток
Неожиданно увидел, что на одной из страниц Auth::user() возвращает мне не текущего пользователя, а последнего в таблице Users
В странице нет ничего - простая выгрузка контента.
Функция Контроллера также никак не влияет на фасад Auth.
В ViewComposer заведена $user = Auth::user(); для использования в видах.... в общем ничего необычного. И тут на тебе - левый юзер вылезает...
У кого какие мысли где капать?
по мне так просто при получении null просто редиректить на 404
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');
}
}
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",
cache: false,
data: mydata,
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);
});
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? Как убрать дублирующие значения?
А ларчик то просто открывается…
Наш любимый защитник VerifyCsrfToken блочит всех и вся,
Откройте посредник VerifyCsrfToken и добавьте исключения к роуту
<?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/*',
];
}
Для примера, я пускаю юзеров только на те поддомены, которые соответствуют с уже имещимся аккаунтам…
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');
}
});
});
Согласно мануалам от Яндекс сервис Яндекс.Деньги отправляет 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
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.
Далее я сделал простую форму на локальном сервере для отсылки пост-запроса
<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>
И что же? У меня открывается не запрошенная страница, а главная!
Где капать? Что курить? Подскажите!
Я реализовал поддомены так:
/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];
}
Как-то так....
Всем доброго времени суток
Помогите разобраться с проблемой.
В составе админки сайта использовал https://github.com/talvbansal/media-manager
для управления файлами.
На локальном сервере (ubuntu 16 lts desctop) все работает адекватно - папки создаются, открываются, файлы заливаются...
Однако на VDS (ubuntu 16 server) вместо файлов-папок выходят их мета-данные...папки создаются, но не открываются, файлы не заливаются - 500 ошибка.
Права и владельца прописал...