Есть два баннера, один выводиться на всех страницах, а другой выводиться на странице календаря, в зависимости от того на каком баннере установлен чекбокс вывода на странице календаря, тот баннер и выводиться. Как сделать чтобы при выборе переключателя "Отображать на странице календаря" в одном из баннеров, выполнялась проверка состояния этого переключателя в другом баннере и если он включен - его выключать.
BannerController
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Models\Banner;
use App\Repositories\BannerRepository;
use App\Http\Requests\StoreBanners;
use Illuminate\Support\Facades\Session;
use App\Http\Controllers\Controller;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class BannerController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
protected $fileRepository;
protected $bannersRepository;
public function __construct(BannerRepository $bannersRepository)
{
$this->bannersRepository = $bannersRepository;
}
public function index()
{
$banners = Banner::with('translate', 'media')->latest()->paginate();
return view('admin.banners.index', compact('banners'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.banners.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(StoreBanners $request)
{
$data = $request->all();
$banners = $this->bannersRepository->createBanners($data);
$this->checkAndUploadImage($request, 'poster', 'posters', $banners);
Session::flash('message', 'Successfully created banner!');
return redirect()->route('banners.index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$banner = Banner::find($id);
if(empty($banner)){
abort(404);
}
return view('admin.banners.edit', compact('banner'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(StoreBanners $request, $id)
{
if (!$banners = Banner::find($id)) {
throw new NotFoundHttpException('Banner not found');
}
$data = $request->all();
$this->checkAndUploadImage($request, 'poster', 'posters', $banners);
$this->bannersRepository->editBanners($data, $id);
Session::flash('message', 'Successfully updated banner!');
return redirect()->route('banners.index');
}
public function checkAndUploadImage($request, $fileName, $collection, $model):void {
if($file = $request->file($fileName)) {
if($model->getMedia($collection)->first()) {
$model->getMedia($collection)->first()->delete();
}
$model->addMediaFromRequest($fileName)->toMediaCollection($collection);
}
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Banner::find($id)->delete();
return redirect()->route('banners.index');
}
}
BannerRepository
<?php
/**
* Created by PhpStorm.
* User: rise
* Date: 5/31/2018
* Time: 6:16 PM
*/
namespace App\Repositories;
use App\Models\Banner;
use App\Models\BannerTranslation;
class BannerRepository extends Repository
{
/**
* Specify Model class name
*
* @return mixed
*/
function model()
{
return 'App\Models\Banner';
}
public function createBanners($data)
{
$banner = [
'is_calendar' => $data['is_calendar'] ?? 0,
];
$banner = $this->create($banner);
$this->addTranslationBanner($data, $banner->id);
return $banner;
}
public function editBanners($data, $id)
{
$array = [
'is_calendar' => $data['is_calendar'] ?? 0,
];
$this->update($array, ['id' => $id]);
$banners = Banner::find($id);
$this->editTranslationBanner($data, $banners);
}
public function addTranslationBanner($data, $bannerId)
{
foreach (get_languages() as $lang => $val) {
BannerTranslation::create([
'banner_id' => $bannerId,
'language' => $lang,
'title' => $data['title_' . $lang],
]);
}
}
public function editTranslationBanner($data, $banner)
{
foreach (get_languages() as $lang => $val) {
$bannerTranslation = BannerTranslation::where(['banner_id' => $banner->id, 'language' => $lang])->first();
$bannerTranslation->update([
'banner_id' => $banner->id,
'language' => $lang,
'title' => $data['title_' . $lang],
]);
}
}
}
Вот что получилось в итоге.
$array = [
'is_calendar' => $data['is_calendar'] ?? 0,
];
if(isset($data['is_calendar'])){
Banner::where('id', '<>', $id)->update(['is_calendar' => 0]);
}
else{
Banner::where('id', '<>', $id)->update(['is_calendar' => 1]);
}
$this->update($array, ['id' => $id]);
$banner = Banner::find($id);
$this->editTranslationBanner($data, $banner);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу разобраться с валидацией формы при отправке ajaxУ меня есть виджет с формой, во вьюхе которого находится ActiveForm
Есть API которое выдает список пользователей с N количеством параметров у пользователя(имя, телефон
Всем привет! Заголовок запроса может быть не понятен, но я сейчас попробую объяснитьНа сервере есть тексты, как эти: