Comments (3)
There are two options to load jobs from database. The first option is to load the cron expression and the function from database. In my opinion this is a bad idea because someone with database access can easily manipulate the whole application. Your database schema could look like:
Schema::create('jobs', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('expression');
$table->string('function');
$table->boolean('enabled');
});
After creating the Eloquent model Job
class file for the jobs table you could add all cron jobs in the AppServiceProvider.php
file like this:
public function boot() {
\Event::listen('cron.collectJobs', function() {
$jobs = App\Job::all();
foreach ($jobs as $job) {
\Cron::add($job->name, $job->expression, function() {
eval($job->function)
}, $job->enabled);
}
});
}
The second and safer way is to load only the expression from database.
Schema::create('jobs', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('expression');
$table->boolean('enabled');
});
public function boot() {
\Event::listen('cron.collectJobs', function() {
$example1 = App\Job::where('name', 'example1')->firstOrFail();
\Cron::add('example1', $example1->expression, function() {
// Do some crazy things successfully
return null;
}, $job->enabled);
});
}
The code is not tested but I hope you get the concept. I prefer the second solution although it is not as dynamic as the first one.
from cron.
Thank you very much for the detailed answer!
Your security concerns are a very good point, too. I thought about that and I think with a function whitelist you can have a compromise between the two options.
from cron.
Yes, I whitelist is maybe a good choice.
from cron.
Related Issues (20)
- Are tests working? HOT 2
- Incompatibility with Laravel 8, 9 HOT 1
- Exception with two closures on the same line of code HOT 3
- Symfony\Component\Console\Helper\HelperSet->get('table') HOT 3
- command cron:run/list error HOT 1
- stop cronjob run during beforeRun event HOT 3
- Cron job running only one time HOT 3
- Pull request #80 not in composer package HOT 3
- trying to understand why I should use this over Laravel's built-in scheduler HOT 2
- Which user should run cron HOT 2
- Laravel 5.4 support HOT 3
- PHP Fatal error: Class 'App\Providers\Cron' not found in C:\xampp\htdocs\isend\blog\app\Providers\AppServiceProvider.php on line 33 HOT 3
- laravel5.2.45 install failed HOT 2
- passing variable to the function parameter before adding a cron HOT 5
- Have Undefined index while run the cron job!!! HOT 3
- Php artisan cron:run Not working HOT 13
- Can't use `artisan route:cache` because the built-in cron route uses a closure HOT 5
- [Laravel 5.6] Ambiguous class resolution warning HOT 10
- doesn't work with Laravel 5.8 HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cron.