Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Есть пример
https://github.com/anthonygore/vue-js-laravel-ssr
Он разворачивается без проблем, но не могу понять как поставить расширение для js в open server или в принципе в php, ведь расширения php обычно в виде dll а тут множество файлов
https://github.com/phpv8/v8js
Тут краткий вариант кода
Всем привет.
Моя проблема связана с vue, но оч прошу помочь, т.к реалньо непонятно что с ней делать.
У меня непонятная проблема с placeholder у input, который принимает значение из свойства объекте родителя.
В ларавел-проекте есть дочерний компонент, который выводит значение из объекта(свойства placeholder со строкой ) родителя в placeholder обычного input-а
https://gitlab.com/Kir1/arenda/-/blo...utPassword.vue
Вот миксин
https://gitlab.com/Kir1/arenda/-/blo...ndart/field.js
Проблема в ie11 - из-за присваивания плейсхолдеру значения из свойства объекта родителя срабатывает @input при загрузке страницы.
Реально, если убрать placeholder или в ф-ции computed возвращать просто значение , а не значение из объекта, то с @input проблем нет.
Вот проект.
https://gitlab.com/Kir1/arenda.git
Ветка placeholder
Там страница профиль, внизу поля "старый пароль", увидите, что у них в ie11 сами срабатывают ф-ции из @input
/profile
В итоге просто создал свой драйвер.
А, забыл сказать, что юзаю open server
https://github.com/Bratislavman/cinemastudios.git всем привет, посмотрите плз почему не даёт файлы сохранять - ошибка Impossible to create the root directory (код можете увидеть в StudioController), вернее, файл сохраняет физически, но генерит ошибку и следующий за этим код не проходит(после npm сразу на главной сайта форма для экшена create будет) п.с ветка dev windows 10
Поднимаю тему.
п.с в последнем проекте(13 месяцев) получил очень интересный опыт работы с socket.io и React
Ищу подработки, (8 часов в неделю максимум).
Laravel знаю хорошо, но под высокие нагрузки проекты не разрабатываю.
Фронтенд делаю на react, есть значительный опыт в создании spa(+ websocket io для работы в реальном времени)
Спасибо
Всем привет, я азял папку рус языка отсюда
https://github.com/caouecs/Laravel-lang … ter/src/ru
И положил её в
resources\lang\ru
В
\config\app.php
Я поставил locale на ru
Затем почистил кеш php artisan config:cache
И всё равно форма регистрации и авторизации на англ. В чём может быть проблема? В доке всё также как и у 5 версии.
Не в hidden, там фигня в том, что теряются именно свойства с коллекциями и массивами в значении. С простыми данными не теряются.
А на сервере была ошибка
Error: connect ECONNREFUSED 172.31.16.20:443
Я создал этот айпишник в айсп-менеджере и думал что он добавлен, а оказалось. это в другом месте надо было делать.
Коллекция при передаче из события на фронт(echo server) теряет добавленные свойства, при этом можно передать отдельно атрибуты и отношения и они приходят нормально.
Ссылка на скрин
$users = User::where('id', '=', $request->userId)
->orWhere('id', '=', $userId)
->with('user_fields')
->with('user_session')
->get()
->keyBy('id');
$users = $users->map(function ($user) {
$user->online = $user->user_session ? true : false;
$user->friendship = 'confirm';
return $user;
});
event(new RequestFriendshipAccepted($friendship->id, $userId, $users[$request->userId], $countIncoming, true));
Притом запись удаляется и в событие запись попадает, странная ошибка
После удаления записи и генерации события(с записью) возникает ошибка. Если произвести удаление после создания событий, то ошибки не возникает, но сама ошибка странная.
{"message":"No query results for model [App\\Models\\Friends].","exception":"Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException
if ($friendship) {
$countIncoming = DB::table('friends')->where([
['confirm', '=', $confirm],
[$columnCountFrienship, '=', $id1]
])->count() - 1;
$friendship->delete();
event(new RequestFriendshipCancel($friendship, $id1));
event(new RequestFriendshipCancel($friendship, $id2, $countIncoming, true));
Пока ток убедился, что все значения свойств меняются кроме тех, у которых в значении коллекция или массив.
В строке $friendship->friendship создаются свойство и меняся далее в коде, однако свойство $friendship->user_fields не меняет свои значения
$friendships->map(function ($friendship, $id) use ($userId, &$array) {
$friendship->friendship = 'null';
$friendship->online = $friendship->user_session ? true : false;
if ($friendship->confirm) {
$friendship->friendship = 'confirm';
if ($friendship->online) {
$array['friends']['online']['objects'] [$id] = $friendship;
$array['friends']['online']['keys'] [] = $id;
}
$array['friends']['all']['objects'] [$id] = $friendship;
$array['friends']['all']['keys'] [] = $id;
} else {
if ($friendship->user_id == $userId) {
\Debugbar::info((string)$friendship);
$friendship->user_fields = '';
$friendship->user_session = '';
\Debugbar::info((string)$friendship);
$array['friendsRequests']['outgoing']['objects'] [$id] = $friendship;
$array['friendsRequests']['outgoing']['keys'] [] = $id;
} elseif ($friendship->friend_id == $userId) {
$array['friendsRequests']['incoming']['objects'] [$id] = $friendship;
$array['friendsRequests']['incoming']['keys'] [] = $id;
}
}
return $friendship;
});
строка 16
{"id":2,"user_id":3,"friend_id":1,"confirm":0,"created_at":"2019-07-11 15:59:53","updated_at":"2019-07-11 15:59:53","friendship":"null","online":true,"user_fields":[{"id":5,"user_id":3,"fields_id":35,"value":"\u0410\u043d\u043e\u043d\u0438\u043c"},{"id":6,"user_id":3,"fields_id":36,"value":"\u0410\u043d\u043e\u043d\u0438\u043c\u0443\u0441"}],"user_session":{"id":"rz6CwEuU8qwhZIzWphuhjxAkmRmAPEjahuQEWV1y","last_activity":1563716292,"user_id":3},"friend_fields":[{"id":1,"user_id":1,"fields_id":35,"value":"\u041b\u0435\u0433\u043e\u043b\u0430\u0441"},{"id":2,"user_id":1,"fields_id":36,"value":"\u042f\u043a\u043e\u0432\u043b\u0435\u0432\u0438\u0447"}],"friend_session":null}строка 19
info
{"id":2,"user_id":3,"friend_id":1,"confirm":0,"created_at":"2019-07-11 15:59:53","updated_at":"2019-07-11 15:59:53","friendship":"null","online":true,"user_fields":[{"id":5,"user_id":3,"fields_id":35,"value":"\u0410\u043d\u043e\u043d\u0438\u043c"},{"id":6,"user_id":3,"fields_id":36,"value":"\u0410\u043d\u043e\u043d\u0438\u043c\u0443\u0441"}],"user_session":{"id":"rz6CwEuU8qwhZIzWphuhjxAkmRmAPEjahuQEWV1y","last_activity":1563716292,"user_id":3},"friend_fields":[{"id":1,"user_id":1,"fields_id":35,"value":"\u041b\u0435\u0433\u043e\u043b\u0430\u0441"},{"id":2,"user_id":1,"fields_id":36,"value":"\u042f\u043a\u043e\u0432\u043b\u0435\u0432\u0438\u0447"}],"friend_session":null}
Решил проблему. В коммитах репозитория https://gitlab.com/Kir1/laral-echo.git решение.
Решил проблему. В коммитах репозитория https://gitlab.com/Kir1/laral-echo.git решение.
Не работает echo server(открытый канал не приходит на фронт, а закрытый выдаёт ошибку) в open- server
https://gitlab.com/Kir1/laral-echo.git
\routes\web.php
На главной странице грузится vue компонент, а на странице test генерируется событие.
[20:49:40] - XbAcDqCodDCCwSc4AAAn joined channel: survey.1
Channel: laravel_database_survey.1
Event: App\Events\MessagePushed
В последнем коммите показано в каких файлах весь код.
Судия по логам эхо-сервера, всё работает, однако на главной странице у компонента слушание события не проходит(консоль лог не выдаёт).
Сайт стоит на open server(redis настроен, никаких ошибок нет ни в логах проекта ларавел, ни в логах сервера).
Сделал у себя в проекте соц сети страничку, где юзер может видеть окошки с чатами(нажимать на них подгружать сообщения), в каждом окошке видно последнее сообщение чата. Поставил эхо сервер и прослушивание на уровне js. Всё работает, но хочу как-нить оптимизировать подключение к чатам.
Сейчас я по сути при каждой подгрузке чатов извне сначала отключаю канал чата на фронте, а потом подключаю, что бы не создавались копии подключения(ведь в таком случае на клиенте событие дублируется сток раз, скок подключений).
Компонент с подключение чата.
class Messages extends React.Component {
componentDidMount() {
this.props.getChats();
}
render() {
let messages = this.props.messages, content;
for (let chatId in messages.chats) {
this.props.echoPushMessage(chatId);
}
/////...... иниже подключение в редакс
const mapDispatchToProps = (dispatch,state, props) => {
return {
getChats: () => dispatch(getChats()),
getChatMessages: (chatId, messageId) => dispatch(getMessages(chatId, messageId)),
echoPushMessage: (chatId) => dispatch(echoPushMessage(chatId)),
messageSend: (msg, chatId) => dispatch(messageSend(msg, chatId)),
messagesSliderDownTrue: () => dispatch(messagesSliderDownTrue()),
messagesSliderDownFalse: () => dispatch(messagesSliderDownFalse()),
writeMessage: (chatMessage, chatId) => dispatch(writeMessage(chatMessage, chatId))
};
};
export default connect(
mapState2Props,
mapDispatchToProps
)(Messages);
И echoPushMessage
export function echoPushMessage(chatId) {
return function (dispatch) {
window.Echo.leave(`chat.${chatId}`);
window.Echo.channel(`chat.${chatId}`)
.listen('PushMessageEvent', (data) => {
dispatch({
type: MESSAGES_ECHO_PUSH_MESSAGE,
data
});
})
};
}
https://medium.com/@dennissmink/laravel … 7a9e57bae9
window.Echo.private(`chat.${chatId}`)
.listen('PushMessageEvent', (data) => {
console.log('echoPushMessage133', data);
dispatch({
type: MESSAGES_ECHO_PUSH_MESSAGE,
data
});
})
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class PushMessageEvent implements ShouldBroadcast
{
public $chatMessage;
public $chatId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($chatMessage, $chatId)
{
$this->chatMessage = $chatMessage;
$this->chatId = $chatId;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('chat.'.$this->chatId);
}
}
routes\channels.php
Broadcast::channel('chat.{chatId}', function ($user, $chatId) {
\Illuminate\Support\Facades\Log::info('1111');
return true;
return ChatMessage::where([
['user_id', $user->id],
['chat_id', $chatId]
])->count() > 0;
});
Если я меняю приват на обычный канал(в js и php), то всё работает, а с приватным получатся ошибка
⚠ [19:39:47] - wVU2a2oSqfPYcBOAAAAG could not be authenticated to private-chat.3
{
"message": "The POST method is not supported for this route. Supported methods: GET, HEAD.",Client can not be authenticated, got HTTP status 405
А затем сразу идёт
Channel: private-chat.3
Event: App\Events\PushMessageEvent
Но при этом в логах ничего не появляется и в js тоже событие не срабатывает.
Варинаты которые я не знаю как приурочить
->with(['unread_messages_count' => function($query)
{
$query->orderBy('created_at', 'desc');
MessageChat::where('active', 1)->where('read',0)->count();
}])
//->select(DB::raw('count(*) as chat_messages'))
->join('chat_messages', 'chat_messages.chat_id', '=', 'orders.user_id')
->select('users.id', 'contacts.phone', 'orders.price');
Как получить количество сообщений из другой таблицы в orm запросе?
$messages = ChatMessage::where('user_id', Auth::id())
->orderBy('created_at', 'desc')
->select(['chat_id'])
->distinct()
->with('chat.last_message.user_fields')
->with('chat.last_message.user_session')
->get();
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ChatMessage extends Model
{
protected $fillable = ['chat_id','user_id', 'text'];
public function user_fields()
{
return $this->hasMany('App\Models\UserFieldsValues','user_id','user_id')
->where('fields_id',35)
->orWhere('fields_id',36);
}
public function user_session()
{
return $this->hasOne('App\Models\Session','user_id','user_id')
->orderBy('last_activity', 'desc')
->where('last_activity','>', time()-5*60)
->select(['id','last_activity', 'user_id']);
}
public function chat()
{
return $this->hasOne('App\Models\Chat','id','chat_id');
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Chat extends Model
{
protected $fillable = ['name','id'];
public function last_message()
{
return $this->hasOne('App\Models\ChatMessage')->orderBy('created_at', 'desc');
}
public function unread_messages_count()
{
return $this->hasMany('App\Models\ChatMessage')->where('read',0)->count();
}
}