alaca33 Dokümanda yazdığı gibi yapacaksınız:
use Illuminate\Support\Facades\Schedule;
Schedule::command(TekrarEdecekIslemCommand::class)
->dailyAt('18:00')
->timezone('Europe/Istanbul');
Bir controller yöntemi başka bir yerden tetiklememeniz gerekiyor. Onu sadece router tetikleyebilir. Onun yerine Service ya da Action yazacaksınız, Command içinde de onu kullanacaksınız, controller içinde de ihtiyacınız varsa orada da onu kullanacaksınız.
Servis Örneği:
app/Services/UserServiceInterface.php
interface UserServiceInterface
{
public function createUser(NewUserData $data, ?User $createdBy = null): User;
public function getTempUsers(): Collection;
}
app/Services/UserService.php
class UserService extends UserServiceInterface
{
public function createUser(NewUserData $data, ?User $createdBy = null): User
{
$user = DB::transaction(function() use ($data) {
$user = User::create($data->toArray());
$user->assignRole('user');
return $user;
});
UserCreated::dispatch($user, $createdBy);
return $user;
}
public function getTempUsers(): Collection
{
// Örnek yöntem...
}
}
app/Providers/AppServiceProvider.php
public function register(): void
{
$this->app
->bind(UserServiceInterface::class, UserService::class);
$this->app
->alias(UserServiceInterface::class, 'services.user');
}
public function provides(): array
{
return [
UserServiceInterface::class,
];
}
Şimdi artık bunu hem controller hem de command içinde kullanabilirsiniz. Mesela
app/Http/Controllers/UserController.php
public function __construct(
private UserServiceInterface $userService,
)
{}
public function store(StoreUserRequest $request)
{
$data = NewUserData::from($request->validated());
$user = $this->userService
->createUser($data, $request->user());
return UserResource::make($user);
}
ya da bir command içinde
public function handle(UserServiceInterface $userService): void
{
$tempUsers = $userService->getTempUsers();
foreach ($tempUsers as $tempUser) {
$userService->createUser($tempUser->toNewUserData());
}
}