Есть ли способ сразу получить оптимизированное под написание апи решение?
Не совсем понял зачем так делать,
Ваш Email: ____________
Link: Войти по номеру телефона
Ваш телефон: ____________
Link: Войти по Email
Это значит что все запросы которые я посылаю из браузера должны проходить через web.php?
Route::middleware('web')
->group(base_path('routes/web.php'));
Route::prefix('api')
- ->middleware('api')
+ ->middleware('web')
->group(base_path('routes/api.php'));
class DynamicRoutes
{
public function routes(): void
{
/** @var Collection $pageCollection */
$pageCollection = getFromCacheIf(config('cache.pages'), CACHE_PAGES, function () {
try {
return $this->getPages();
} catch (\Exception $exception) {
return new Collection();
}
});
$pageCollection->each(function (Page $page) use ($pageCollection) {
$routeName = ROUTE_PREFIX_PAGE.$page->slug;
$routeUri = $page->getAttribute('url');
$parentRouteName = $page->parent_id
? ROUTE_PREFIX_PAGE.($pageCollection->get($page->parent_id)->slug)
: 'home';
Route::prefix($routeUri)->group(function () use ($page, $routeName, $parentRouteName) {
Route::get('', static function () use ($page) {
return App::call($page->controllerName(), ['page' => Page::findOrFail($page->id)]);
})
->name($routeName)
->breadcrumbs(function (Trail $trail) use ($page, $routeName, $parentRouteName) {
return $trail->parent($parentRouteName)
->push($page->localizedAttribute('title'), route($routeName));
});
switch ($page->controllerName()) {
case GalleryController::class:
$this->galleryRoutes($routeName);
break;
case TourController::class:
$this->tourRoutes($routeName);
break;
case NewsController::class:
$this->newsRoutes($routeName);
break;
}
});
});
}
private function galleryRoutes(string $parentRouteName): void
{
Route::get('{gallery:slug}', [GalleryController::class, 'show'])
->name(ROUTE_GALLERY)
->breadcrumbs(function (Trail $trail, Gallery $gallery) use ($parentRouteName) {
return $trail->parent($parentRouteName)
->push($gallery->localizedAttribute('title'), route(ROUTE_GALLERY, $gallery));
});
}
private function tourRoutes(string $parentRouteName): void
{
Route::get('{tour:slug}', [TourController::class, 'show'])
->name(ROUTE_TOUR)
->breadcrumbs(function (Trail $trail, Tour $tour) use ($parentRouteName) {
return $trail->parent($parentRouteName)
->push($tour->localizedAttribute('title'), route(ROUTE_TOUR, $tour));
});
}
private function newsRoutes(string $parentRouteName): void
{
Route::get('{news:slug}', [NewsController::class, 'show'])
->name(ROUTE_NEWS)
->breadcrumbs(function (Trail $trail, News $news) use ($parentRouteName) {
return $trail->parent($parentRouteName)
->push($news->localizedAttribute('title'), route(ROUTE_NEWS, $news));
});
}
private function getPages(): Collection
{
$pages = Page::whereNotNull('slug')->get()->keyBy('id');
$pages->each(function (Page $page) use ($pages) {
$page->setAttribute('url', $this->buildUrlForPage($page, $pages));
});
return $pages;
}
private function buildUrlForPage(Page $page, Collection $pages): string
{
if (!$page->parent_id) {
return $page->slug;
}
$parentPage = $pages->get($page->parent_id);
return $this->buildUrlForPage($parentPage, $pages).'/'.$page->slug;
}
}
//...
app(DynamicRoutes::class)->routes();
Route::fallback(function () {
return response()->view('errors.404', [], 404);
});
Route::middleware('web')
->namespace('App\\Http\\Controllers')
->group(base_path('routes/web.php'));
$validatedData = $request->validate([
// ... ваши правила валидации ...
]);
$object = MyObject::create($validatedData);
id | text
id | content | …
tag_id | content_id
class Content extends Model {
public function tags(): BelongsToMany {
return $this->belongsToMany(Tag::class);
}
}
class Tag extends Model {
public function contents(): BelongsToMany {
return $this->belongsToMany(Content::class);
}
}
dd($content->tags);
Route::post("article/{article}", [ArticleController::class, 'update')
->name('article.update');
class ArticleController extends Controller
{
public function update(Article $article, ArticleUpdateRequest $request)
{
$article
->fill($request->validated())
->save();
return redirect(route('article.edit', $article));
}
}
Route::name('user.')->group(function(){
//Route::view('/private','priv')->middleware(('auth'))->name('private');
Route::view('/private','priv')->middleware(['auth'])->name('private');
Route::get('/login',function(){
if(Auth::check()){
return redirect(route('user.private'));
}
return view('loggin'); // Вынести из условия
})->name('login');
Route::get('/reg',function(){
if(Auth::check()){
return redirect(route('user.private'));
}
return view('reg'); // Вынести из условия
})->name('reg');
});
use Illuminate\Database\Eloquent\Factories\Sequence;
public function run()
{
$list = ['secret1','secret2','secret3']; //получаем список данных;
shuffle($list); // Перемешиваем
Order::factory(20)
->state(new Sequence(function () use (&$list) {
return ['secret_id' => array_pop($list)];
}))
->create();
}