Son dönemde dikkatimi çeken bir bağlantı, PHP Attributes Can Be Used for Route Definition and Discovery başlıklı yazı oldu.
<p>Uzun zamandır Symfony kullanıcısı olarak, Drupal'ın bu alanda ilerleme kaydetmesi beni memnun ediyor. Drupal geliştiricileri, <a href="https://www.php.net/manual/en/language.attributes.overview.php" target="_blank" rel="noopener noreferrer">attributes</a> kullanımına gerçekten sahip çıkıyorlar. İlk fark ettiğimde, bunu <a href="https://api.drupal.org/api/drupal/core%21core.api.php/group/hooks/11.x" target="_blank" rel="noopener noreferrer">hooks</a> için kullanmaya başladıklarında olmuştu.</p>
<p><code>Route</code> attribute'ının yanı sıra, invokable controller'ların kullanımına da olanak tanıyan bu değişiklik, kullanım kolaylığı açısından önemli bir adım. Drupal makalesine göre:</p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><span class="kn">namespace</span> <span class="nn">Drupal\router_test\Controller</span><span class="p">;</span>use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\Routing\Annotation\Route;
/
- Test controller.
*/
#[Route(
‘/test_class_attribute’,
‘test_class_attribute’,
requirements: [‘_access’ => ‘TRUE’]
)]
class TestClassAttribute extends ControllerBase {
/
- Provides test content.
*/
public function invoke() {
return [‘#markup’ => ‘Testing invoke() with a Route attribute on the class’];
}
}
<p>Birçok kişinin tek yönlü route controller'lar kullandığını görüyorum. PHP’nin tek bir public metodla bir class'ı çağırma imkanı sunduğu göz önünde bulundurulduğunda, method isimlendirmenin gereksiz olduğunu düşünüyorum.</p>
<p>Symfony, <a href="https://tempestphp.com/" target="_blank" rel="noopener noreferrer">Tempest</a> ve şimdi Drupal, attribute tabanlı routing sunarken, Laravel’ın henüz bu özelliği desteklememesi dikkat çekici. Laravel, <a href="https://laravel.com/docs/13.x/controllers#middleware-attributes" target="_blank" rel="noopener noreferrer">middleware attributes</a> ile bu alanda bazı imkanlara sahip, ancak routing konusunda hala geride kalıyor.</p>
<p>Bu konu üzerinde çalışan bir <a href="https://github.com/spatie/laravel-route-attributes" target="_blank" rel="noopener noreferrer">üçüncü taraf paket</a> mevcut. Bu paket, Laravel’le birlikte middleware attributes kullanarak routing için attribute'ların kullanılmasını sağlıyor. Bu durum, gelecekte bir temel özellik haline gelebilir.</p>
<p>Frameworklerin routing attribute'ları için bir standart oluşturması, farklı PHP çözümlerinde birkaç değişiklikle controller’ların kullanılmasına olanak sağlayabilir. Bu, framework keşif özellikleri ile birleştiğinde oldukça faydalı olacaktır.</p>
<p>Route attribute kullanma şekliniz nedir? Bir router config dosyası kullandığınızda, attribute kullanmanızı engelleyen nedir?</p>

