Installation
composer require baks-dev/article-post
php bin/console baks:assets:install
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
baks-dev/core (v7.4+) is installed as a dependency.First Use Case
/admin/articles (if using BaksDev’s admin panel).ArticlePost entity:
use BaksDev\ArticlePost\Entity\ArticlePost;
$article = new ArticlePost();
$article->setTitle('Test Article');
$article->setSlug('test-article');
$article->setContent('Hello, world!');
$entityManager->persist($article);
$entityManager->flush();
Where to Look First
src/Entity/ArticlePost.php (core model).src/Controller/ (if included; check for REST/CRUD endpoints).templates/article_post/ (if using Symfony).config/packages/baks_article_post.yaml (if auto-generated by baks:assets:install).Article Management
ArticlePost entity with setters (setTitle(), setSlug(), setContent()).
Example with validation:
use Symfony\Component\Validator\Constraints as Assert;
$article = new ArticlePost();
$article->setTitle('My Post');
$article->setSlug('my-post'); // Auto-generate via `generateSlug()` if available
$article->setContent('Content...');
$article->setStatus(ArticlePost::STATUS_DRAFT); // Use constants from entity
$article->setStatus(ArticlePost::STATUS_PUBLISHED);
$entityManager->flush();
Slug Handling
$article->setTitle('New Post Title');
$article->generateSlug(); // Hypothetical method; check entity
Relationships
$category = $entityManager->getRepository(Category::class)->find(1);
$article->addCategory($category);
ArticlePostAttachment entity (if exists) to link files/images.API Integration
AbstractController:
use BaksDev\ArticlePost\Controller\ArticlePostController;
// Extend or override default controller logic.
Event Listeners
article_post.pre_persist or article_post.post_update events (if documented):
// config/services.yaml
BaksDev\ArticlePost\EventListener\MyListener:
tags:
- { name: kernel.event_listener, event: article_post.pre_persist, method: onPrePersist }
ArticlePost entity or use Doctrine extensions for extra fields (e.g., json columns for metadata).
/**
* @ORM\Column(type="json")
*/
private $metadata = [];
Elasticsearch or Doctrine\ORM queries:
$articles = $entityManager->createQuery(
'SELECT a FROM BaksDevArticlePostBundle:ArticlePost a WHERE a.title LIKE :query'
)->setParameter('query', '%search%')->getResult();
security.yaml:
access_control:
- { path: ^/admin/articles, roles: ROLE_ADMIN }
Missing Dependencies
baks-dev/core (v7.4+) is installed. Conflicts may arise with older versions.composer update baks-dev/core if issues persist.Slug Collisions
generateSlug() method or use a unique suffix:
$article->setSlug('unique-' . uniqid() . '-slug');
Migration Issues
doctrine:migrations:diff fails, check for:
baks-dev/core migrations.php bin/console doctrine:schema:update --force.Undocumented Features
src/ for undocumented classes (e.g., ArticlePostAttachment).EventDispatcher usage in Entity/ArticlePost.php.PHP 8.4+ Requirements
create_function()). Use modern alternatives if extending.BaksDev\ArticlePost\Entity\ArticlePost) matches your use statements.
php bin/console debug:autowiring BaksDev\ArticlePost
php bin/console debug:validator
php bin/console cache:clear
Custom Repositories
Extend ArticlePostRepository for complex queries:
namespace App\Repository;
use BaksDev\ArticlePost\Repository\ArticlePostRepository as BaseRepository;
class ArticlePostRepository extends BaseRepository {
public function findPublishedWithCategory(int $categoryId) {
return $this->createQueryBuilder('a')
->where('a.status = :status')
->andWhere('a.category = :category')
->setParameter('status', ArticlePost::STATUS_PUBLISHED)
->setParameter('category', $categoryId)
->getQuery()
->getResult();
}
}
Register in services.yaml:
App\Repository\ArticlePostRepository:
decorates: 'baks_dev.article_post.repository.article_post'
arguments: ['@App\Repository\ArticlePostRepository.inner']
Twig Extensions Add custom filters/global variables:
// src/Twig/AppExtension.php
namespace App\Twig;
use BaksDev\ArticlePost\Entity\ArticlePost;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class AppExtension extends AbstractExtension {
public function getFunctions() {
return [
new TwigFunction('format_article_excerpt', [$this, 'formatExcerpt']),
];
}
public function formatExcerpt(ArticlePost $article, int $length = 100) {
return Str::limit(strip_tags($article->getContent()), $length);
}
}
Form Types Override the default form type (if provided):
// src/Form/ArticlePostType.php
namespace App\Form;
use BaksDev\ArticlePost\Form\ArticlePostType as BaseType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class ArticlePostType extends BaseType {
public function buildForm(FormBuilderInterface $builder, array $options) {
parent::buildForm($builder, $options);
$builder->add('customField', TextType::class);
}
}
Update services.yaml to replace the original:
App\Form\ArticlePostType:
tags: [form.type, { name: baks_dev_article_post_type }]
baks:assets:install may overwrite existing configs. Backup config/packages/ before running..env keys (e.g., BAKS_ARTICLE_POST_DEFAULT_CATEGORY). Add to .env if needed:
BAKS_ARTICLE_POST_DEFAULT_CATEGORY=1
php bin/console cache:pool:clear cache.app
How can I help you explore Laravel packages today?