interface FileSystemInterface {
public function write($file, $data);
public function read($file);
}
class OSFileSystem implements FileSystemInterface {
public function write($file, $data) {
// открываем файлик, пишем данные
}
public function read($file) {
// открываем файлик, возвращаем данные
}
}
class CloudFileSystem implements FileSystemInterface {
public function write($file, $data) {
// открываем соединение с облаком, пишем данные
}
public function read($file) {
// открываем соединение с облаком, возвращаем данные
}
}
class FileStorage {
protected $Fs;
public function __construct(FileSystemInterface $Fs) {
$this->Fs = $Fs;
}
public function saveFile() {
$this->Fs->write('file.txt', 'file data');
}
public function getFile() {
return $this->Fs->read('file.txt', 'file data');
}
}
// Хранилище файлов работает с файловой системой ОС:
$FS = new OSFileSystem();
$FileStorage = new FileStorage($Fs);
$FileStorage->getFile();
// Хранилище файлов работает с файловой системой в облаке:
$FS = new CloudFileSystem();
$FileStorage = new FileStorage($Fs);
$FileStorage->getFile();
$promise1 = $client->getAsync('http://www.example.com/foo1');
$promise2 = $client->getAsync('http://www.example.com/foo2');
$promise3 = $client->getAsync('http://www.example.com/foo3');
$promises = [$promise1, $promise2, $promise3];
$results = GuzzleHttp\Promise\settle($promises)->wait(); // тут все результаты
npm run build
npm run dev
<script type="module" src="http://[::1]:5173/@vite/client"></script>
<link rel="stylesheet" href="http://[::1]:5173/resources/assets/css/app.scss" />
php artisan make:policy OrderPolicy
class OrderPolicy
{
use HandlesAuthorization;
public function update(User $user, Order $order)
{
if (!$user->isEmployee()) {
return false;
}
if ($user->id !== $order->user_id) { // остальной кусок ифа не понял - но он должен быть здесь.
return false;
}
return in_array($order->status, [Order::NEW, Order::WORK]);
}
}
class OrderUpdateRequest extends FormRequest
{
public function authorize()
{
return $this->user()->can('update', $this->order);
}
}
class AutoMark extends Model
{
use HasFactory;
public function models()
{
return $this->hasMany(AutoModel::class, 'mark_index', 'index');
}
public function modifications()
{
return $this->hasManyThrough(AutoModification::class, AutoModel::class);
}
}
UPDATE table
SET column2 = (CASE column1 WHEN 1 THEN 'val1'
WHEN 2 THEN 'val2'
WHEN 3 THEN 'val3'
END)
WHERE column1 IN(1, 2 ,3);
INSERT into `table` (id, fruit)
VALUES (1, 'apple'), (2, 'orange'), (3, 'peach')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
public function index(TabRepository $repository)
{
return inertia()->render('Index', [
'default_tab' => fn () => $repository->getDefaultTabData(), // отдаст по умолчанию и по требованию
'tab2' => Inertia::lazy(fn () => $repository->getTab2Data()), // отдаст только по требованию
'tab3' => Inertia::lazy(fn () => $repository->getTab3Data()), // отдаст только по требованию
]);
}
<Link class="tab" href="route('blabla')" :only="['default_tab']">default_tab</Link>
<Link class="tab" href="route('blabla')" :only="['tab2']">tab2</Link>
<Link class="tab" href="route('blabla')" :only="['tab3']">tab3</Link>
$schedule->call(new DoCurrentJobsFromDb)->everyMinute();
DoCurrentJobsFromDb
запрос к базе, выборка по времени текущих заданий и отправка их на немедленное выполнение(тут снова тем или иным способом, подходящим под вашу архитектуру).class Project extends Model{
............
public function getFullUrlAttribute(){
return функция которая делает из атрибута полной путь();
}
.........
}