Laravel background jobs

C++ JAVA
User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed May 09, 2018 2:27 pm

Revelation wrote:А извикал ли си библиотеката?
Как да го направя?

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 786
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed May 09, 2018 3:13 pm

Пренатоварен ми се струваш, щом започна с такива въпроси. :D

https://vuejs.org/v2/guide/#Getting-Started

Добави просто библиотеката, както добавяш jquery, bootstrap или нещо друго. Виж в линка, копирай някой от CDN-ите и готово.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Fri May 11, 2018 4:56 am

Отказах се от vue и вместо това направих таймера с jquery. Сложих клик функция на бутона, сметнах времето и т.н. обаче изникна един проблем. Рут-а на бутона сочи към функцията в която викам queue-то, и за това на края на функцията завършвам с return redirect()->back(); за да се върна на главния рут. Обаче така прецаквам клик-а на jquery-то, то се стартира и спира защото след рефреша не е кликнато. Какво мога да направя?

User avatar
Fakeheal
Гуру
Гуру
Posts: 2674
Joined: Sat Apr 17, 2010 6:37 am
Answers: 350
Location: /r/eyebleach
Contact:

Post by Fakeheal » Fri May 11, 2018 7:19 am

teroristd wrote:Отказах се от vue и вместо това направих таймера с jquery. Сложих клик функция на бутона, сметнах времето и т.н. обаче изникна един проблем. Рут-а на бутона сочи към функцията в която викам queue-то, и за това на края на функцията завършвам с return redirect()->back(); за да се върна на главния рут. Обаче така прецаквам клик-а на jquery-то, то се стартира и спира защото след рефреша не е кликнато. Какво мога да направя?

Я обясни с код :)

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Fri May 11, 2018 8:24 am

Fakeheal wrote:
teroristd wrote:Отказах се от vue и вместо това направих таймера с jquery. Сложих клик функция на бутона, сметнах времето и т.н. обаче изникна един проблем. Рут-а на бутона сочи към функцията в която викам queue-то, и за това на края на функцията завършвам с return redirect()->back(); за да се върна на главния рут. Обаче така прецаквам клик-а на jquery-то, то се стартира и спира защото след рефреша не е кликнато. Какво мога да направя?

Я обясни с код :)
При клик се изпълнява рута на ъпдейта, а при redirect()->back() се връща на главния, което рефрешва страницата, и jquery таймера който е стартиран при клика, след рефреша изчезва.

Искам само да добавя че delay-а на Job-a няма нищо общо с jquery таймера, който ще го използвам просто да визуализира необходимото време за построяването на сградата.

И още нещо да добавя :D, ако няма клик функция на jquery таймера той си се стартира веднага и рефреша не му пречи, но така не ми върши работа.

[php]
//Това е главния рут който връща вю-то.
Route::get('/home', 'HomeController@index')->name('home');

//Това е рута за ъпдейта на сградата
Route::get('/home/goldMineUpdate', [

'uses' => 'HomeController@goldMineUpdate',
'as' => 'gold.mine.update'

]);
[/php]

Не съм дал целия код на метода защото той няма отношение към въпроса.
[php]
public function goldMineUpdate()
{
$job = (new CreateGoldMineJob($user_id))->delay(300);
dispatch($job);

Session::flash('success', 'The gold mine was updated successfuly');

return redirect()->back();
}
[/php]

Това е блейда. Пак не съм дал целия код, но грубо часовника получава времето и при клик почва да тече.
[php]

@php
date_default_timezone_set('Europe/Sofia');
$date = date('Y-m-d H:i:s');
$currentDate = strtotime($date);
$futureDate = $currentDate + (60 * 5);
$formatDate = date("Y-m-d H:i:s", $futureDate);
@endphp


@if($mine->gold_mine == 0)
@php $time = $formatDate; @endphp
@endif

<a href="{{route('gold.mine.update')}}" id="target_one">
Update
</a>

<script>

var time = {!! json_encode($time) !!}

$("#target_one").click(function () {
$('#clock').countdown(time, function (event) {
var totalHours = event.offset.totalDays * 24 + event.offset.hours;
$(this).html(event.strftime(totalHours + ' ч. %M мин. %S сек.'));
});
});

</script>
[/php]

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Fri May 11, 2018 9:01 am

Всъщност като се замисля, по този начин както съм го направил няма да ми върши работа. Има ли начин да визуализирам delay-а на job-a?

[php]
$job = (new CreateGoldMineJob($user_id))->delay(300);
[/php]

User avatar
Fakeheal
Гуру
Гуру
Posts: 2674
Joined: Sat Apr 17, 2010 6:37 am
Answers: 350
Location: /r/eyebleach
Contact:

Post by Fakeheal » Fri May 11, 2018 9:12 am

1-во разкарай всичко в @php @endphp и го сложи в контролера. Чупиш дизайн патърн.
2-ро използвай ajax да диспатчнеш joba:

Code: Select all

     $&#40;"#target_one"&#41;.click&#40;function &#40;event&#41; &#123;
        event.preventDefault&#40;&#41;;
        //$.ajax&#40;&#41; blah blah
       //в success&#40;&#41; на ajax-a сложи countdown и покажи нотификацията, че е почнало &#40;туй що подаваш в сешън->flash&#40;&#41;
        $&#40;'#clock'&#41;.countdown&#40;time, function &#40;event&#41; &#123;
            var totalHours = event.offset.totalDays * 24 + event.offset.hours;
            $&#40;this&#41;.html&#40;event.strftime&#40;totalHours + ' ч. %M мин. %S сек.'&#41;&#41;;
        &#125;&#41;;

    &#125;&#41;;
PS: в респонса сложи времето, когато е почнало да брои за countdown-a.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Fri May 11, 2018 9:47 am

Ajax-a по-принцип не ми е сила :D . Така ли трябва да стане.

Code: Select all

$&#40;"#target_one"&#41;.click&#40;function &#40;event&#41; &#123;
            event.preventDefault&#40;&#41;;
            $.ajax&#40;&#123;
               type&#58;'GET',
               url&#58;'/home/goldMineUpdate',
               success&#58;function&#40;&#41;&#123;
                  var time = &#123;!! json_encode&#40;$time&#41; !!&#125;
                  $&#40;'#clock'&#41;.countdown&#40;time, function &#40;event&#41; &#123;
                   var totalHours = event.offset.totalDays * 24 + event.offset.hours;
                   $&#40;this&#41;.html&#40;event.strftime&#40;totalHours + ' ч. %M мин. %S сек.'&#41;&#41;;
                  &#125;&#41;;
               &#125;
            &#125;&#41;;
         &#125;
Това за респонса не го разбрах. Също и това за флаш-а.

User avatar
deam0n
Web-tourist
Web-tourist
Posts: 3013
Joined: Sat Oct 01, 2005 4:33 pm
Answers: 204
Location: Шопландия
Contact:

Post by deam0n » Fri May 11, 2018 10:04 am

teroristd wrote: вади грешка.

[php]
<div id="app">
{{ message }}
</div>

<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
[/php]
Дава грешка, защото както знаеш в bladе темплейтите принтваш променливи с {{ $var }}, точно както във Vue.. За да не дава грешка трябва да се слага @ отпред.
примерно

Code: Select all

<div id="app">
  @&#123;&#123; message &#125;&#125;
</div>

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Fri May 11, 2018 10:15 am

Да това го открих, но имаше и други проблеми. Компонентите не работеха, включително и дефаултовия. Той се визуализираше но каквото и да променях по него нямаше ефект. В обикновен хтмл vue си работеше, но в ларавел имаше проблеми, така че се отказах да го ползвам.

Post Reply