$filter = function(string $input, string $attr) {
return implode(' ', array_reduce(explode(' ', $input), function(array $acc, string $selector) use($attr) {
$acc[str_starts_with($selector, $attr) ? $attr : $selector] = $selector;
return $acc;
}, []));
};
var_dump($filter('any1 col-12 any2 col-4 any3 col-7 other', 'col-'));
var_dump($filter('any1 col-12 any2 col-4 any3 col-7 other col-7 col-7', 'col-'));
children `React`
import React from 'react'
import { HeadProvider, Title } from 'react-head'
import { Link, useLocation } from 'react-router-dom'
export function AdminLayout({children, title = 'Your title'})
{
let location = useLocation()
return (
<>
<HeadProvider>
<Title>{title}</Title>
</HeadProvider>
<header>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/dashboard">Dashboard</Link>
</li>
</ul>
</nav>
</header>
{location.pathname} {/* Здесь инфа о текущей ссылке после слэша */}
{children} {/* Здесь будет информация из компонента который обернёте */}
<div>Footer</div>
</>
)
}
import React from 'react'
import { AdminLayout } from './components/AdminLayout'
export default function About()
{
const Title = 'About'
return (
<AdminLayout title={Title}>
<h2>{Title}</h2>
<p>there is some fucking text that is not interesting to anyone.</p>
</AdminLayout>
)
}
flush()
нужно вынести, потому что вы можете заперсистить 100 объектов и сделать один flush — одна череда обращений к Бд. В вашем же случае будет 100 и более обращений к БДis_a()
и вот это все) и если придет не тот объект — кидать InvalidArgumentException
By default, the form will redirect to the URL the user requested (i.e. the URL which triggered the login form being shown). For example, if the user requestedhttp://www.example.com/admin/post/18/edit
, then after they have successfully logged in, they will be sent back tohttp://www.example.com/admin/post/18/edit.
Redirecting after Success¶
always_use_default_target_path
: try {
// логика
} catch(\Throwable $e) {
// тут например логируем
// тут мы 3-м параметром для нового исключения добавили прошлое исключение
// чтобы не потерять стектрейс изначальной ошибки, мало ли откуда текущий код был вызван
// о чем и говорит PhpStan
throw new MyException('msg', 0, $e);
}
// Этот класс в бандле
/** @MappedSuperclass */
class BaseAnimal
{
/** @Column(type="string") */
protected $name;
/** @Column(type="integer") */
protected $size;
/** @Column(type="boolean") */
protected $canFly;
}
// Этот класс в проекте
/** @Entity */
class Animal extends BaseAnimal
{
/** @Column(type="string") */
private $id;
/** @ManyToOne(targetEntity="Person") */
private $owner;
}