Merhaba arkadaşlar,
Bildiğiniz gibi sandart balde extend etme işleminde bir üst klasöre çıkılamıyor.
resources
-->assets
-->lang
-->layouts
------>layout.blade.php
-->views
------>errors
------>vendor
------>welcome.blade.php
@extends('layouts.layout')
@section('content')
content..
@endsection
Bu şekilde bir yapı olduğunu düşünerek üst klasöre çıkmak istiyorum. Bunun için extends işleminde ".." koyarak üste çıkamadığımdan kendi extends fonksiyonumu yazmak istiyorum.
Bu linkte nasıl yazabileceğimin örneği var.
https://laravel.com/docs/5.3/blade#extending-blade
Bu linkte de extends fonksiyonunun içeriğini görüyoruz.
https://github.com/laravel/framework/blob/5.3/src/Illuminate/View/Compilers/BladeCompiler.php#L857
Bu fonksiyonda gerekli değişikliği yaparak extends2 fonksiyonunu yazmaya çalışıyorum.
protected function compileExtends($expression)
{
$expression = $this->stripParentheses($expression);
$data = "<?php echo \$__env->make($expression, array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>";
$this->footer[] = $data;
return '';
}
Fonksiyonun içeriğini kopyalayarak aşağıdaki hale getirdim. Buradaki sıkıntım aynı anda 2 tane sınıf extend edilemediği için stripParentheses() fonksiyonu ve $footer değişkenine ulaşamamam.
<?php
namespace test\test\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Str;
class BladeServiceProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Blade::directive('extends2', function($expression) {
$expression = $this->stripParentheses($expression);
$data = "<?php echo \$__env->make($expression, array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>";
$this->footer[] = $data;
return '';
});
}
/**
* Register bindings in the container.
*
* @return void
*/
public function register()
{
//
}
}
Ulaşsam dahi nasıl bir değişiklik yapmam gerektiğini bilmiyorum. Çünkü; BladeCompliler sınıfı içerisindeki gerçek compileExtends() fonksiyonunun çalışmasını test etmek için müdahale ettiğimde laravelin işleyişinde bir değişiklik göremiyorum. dd($expression) ile sayfayı durdurup kontrol etmek istediğimde sayfa durmadan çalışmasına devam ediyor.
Yan yana koyup çalışmamı önerebilirsiniz. Böyle bir öneriden ziyade bana yapmak istediğim iş hakkında çözüm önerebilirseniz memnun olurum. Özetle; bir üst dizinde bulunan bir dizine ve içeriğine erişmem gerekiyor.
Bu fonksiyonda nasıl bir değişiklik yapmam gerekiyor veya başka nasıl bir çalışma yapabilrim ?