2014-07-05 10 views
10

dan rota adını almak, bu aracılığıyla geçerli URL'den güzergah adını alabilirim?laravel laravel verilmiştir URL'den

Teşekkür ederiz.

+1

Ne yapmaya çalıştığınızı açıklayabilir misiniz? – TunaMaxx

+0

@TunaMaxx Geçerli bir URL değil, geçerli URL'den rota adını almaya çalışıyorum. – user1995781

+0

Hayır, tamamen anlıyorum, ama anlamıyorum * neden * yapmalısın. Esas olarak, route.php dosyasını tersine çevirmek istiyorsunuz. – TunaMaxx

cevap

3

Bunun kutudan çıkma Laravel ile yapılabileceğini sanmıyorum. Ayrıca, Laravel'deki tüm rotaların isimlendirilmediğini unutmayın, bu nedenle rota adını değil, rota nesnesini almak isteyebilirsiniz.

Olası bir çözüm, varsayılan \Iluminate\Routing\Router sınıfını genişletmek ve korunan Router::findRoute(Request $request) yöntemini kullanan özel sınıfınıza genel bir yöntem eklemek olabilir.

bir basitleştirilmiş bir örnek:

class MyRouter extends \Illuminate\Routing\Router { 

    public function resolveRouteFromUrl($url) { 
     return $this->findRoute(\Illuminate\Http\Request::create($url)); 
    } 
} 

Bu belirttiğiniz URL ile eşleşen rotayı dönmelidir, ama aslında bu test etmedim.

Bu yeni özel yönlendiricinin yerleşik olanı değiştirmek istiyorsanız, yeni sınıfınızı varsayılan yerine IoC konteynerine kaydetmek için yeni bir ServiceProvider oluşturmanız gerekeceğini unutmayın.

Sen ihtiyaçlarınıza aşağıdaki kodda ServiceProvider adapte olabilir

:

https://github.com/jasonlewis/enhanced-router

Aksi takdirde sadece gerektiği gibi elle kodunuzu özel yönlendirici örneğini istiyorsanız, bir şeyler yapmak olurdu gibi:

$myRouter = new MyRouter(new \Illuminate\Events\Dispatcher()); 
$route = $myRouter->resolveRouteFromUrl('/your/url/here'); 
1

varsayılan \Iluminate\Routing\Router sınıfını uzatmadan yapılabilir. Eğer dispatchToRoute çağrısından sonra Route::currentRouteName() ararsanız

Route::dispatchToRoute(Request::create('/your/url/here')); 
    $route = Route::currentRouteName(); 

, bu sevk isteğin geçerli Rota adını döndürür.

+0

Özellikle yararlıdır çünkü a) Laravel 5.1'de çalışır ve b) varsayılan sınıfı genişletme gereksinimini ortadan kaldırır. Bunun için çok teşekkür ederim! –

17

Çok kolay yolu Laravel 5.2

app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1'))->getName() 

Bu slug.posts.show

Güncelleme gibi benim Rota adını verir yapmalı: For yöntem POST, PUT veya gibi DELETE th gibi yapabilirsiniz Eğer getValidators vb getAction gibi birden fazla yararlı kamu yöntemleri çağırmak fazla ayrıntı için kaynak https://github.com/illuminate/routing/blob/master/Route.php kontrol edebilirsiniz Illuminate\Routing\Route örneğini dönecektir app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1', 'POST')) bu çalıştırdığınızda Ayrıca

app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1', 'POST'))->getName()//reference https://github.com/symfony/http-foundation/blob/master/Request.php#L309 

olduğunu.

+0

laravel 5.3 de çalışıyor. –

+0

Laravel 5.4 için de çalışıyor. Teşekkürler bayım! – racl101