ボタンをクリックするとクイズが表示されるページに遷移して、毎日指定された時間に更新されてランダムに別のクイズに変わるサイトを作っています。同じ時間ならだれでも同じクイズを表示できるようにしたいです。
今の段階ではQuizController側の処理だけが動いていて、スケジュールの処理が何もしていない状態です。
タスクスケジュールでの処理をコントローラーに渡して実行する必要があるのでしょうか?
またはルーティングが間違っているのでしょうか
どうかよろしくお願いします。
Kernel.php
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use App\Quiz; use Illuminate\Support\Facades\Log; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->call(function() { $quiz = Quiz::with('answer') ->inRandomOrder() ->get(); return $quiz; }) ->everyMinute() ->onSuccess(function () { Log::info('成功'); }); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
QuizController.php(こちらの処理が実行されてしまう)
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Quiz; class QuizController extends Controller { public function show() { $quiz = Quiz::with('answer') ->inRandomOrder() ->get(); return $quiz; } }
Web.php
Route::get('/quiz', function() { return view('quiz.show'); });
API.php
Route::group(['middleware' => ['api']], function () { Route::get('information', 'Api\InformationController@index'); Route::get('quiz', 'Api\QuizController@show'); });
追記
cron
* * * * * cd /user/~ && php artisan schedule:run >> /dev/null 2>&1
php artisan schedule:runの結果
Warning: Unexpected character in input: ' (ASCII=8) state=0 in /Users/~/app/Console/Kernel.php on line 38 Running scheduled command: Callback
「teratailでは、マルチポスト※の推奨はしていません。」とのことです。
参考: https://teratail.com/help#posted-otherservice
> クイズがランダムに更新される
これはどういうことを意味していますか?やりたいことをもう少し具体的に例示していただくと良い回答がつくのではないかという気がしています。おそらくタスクスケジュール機能を使うことが間違っている気がしています・・・
Lulucomさんと同意見で質問の意味が分かりにくいのですが、そもそもLaravelでのタスクスケジュールの実行はcronの設定が必要かと思いますが、その記述が見当たりません。そちらの設定もしているなら記載した方が良いと思います。逆にルーティングとかは質問の件とはあまり関係ない気がします。
返信ありがとうございます。
すいません。色々と説明不足でした。
ボタンをクリックするとクイズが表示されるページに遷移して、毎日指定された時間に更新されてランダムに別のクイズに変わるってことです。
cronの設定とphp artisan schedule:runを実行した際の結果を追記しました。
ご説明ありがとうございます、同じ時間帯なら誰が見ても同じクイズを表示する、という認識であっていますか?
こちらへの返信ではなく、質問を編集するかたちで、仕様を説明していただくと良いでしょう。
はい、その通りです。
stack overflowでよくみたらkawaxさんが回答してくださってましたね。
タスクスケジュールされたコマンドではあのように保存を行い、コントローラではキャッシュから取り出すようにする、ということだと思います。
以前のスタックオーバーフローの回答をLulucomさんの通りに直したら無事動きました。ありがとうございます。
stackoverflowでのkawaxさんの回答で解決されたということでしょうか?よかったですね^ ^
こちらのteratailでの質問はご自身で回答を書いて閉じていただくと良いと思います。
回答1件
あなたの回答
tips
プレビュー