2014-02-12 3 views
1

Я хочу отобразить ссылку, используя название маршрута (, начало) в мой шаблон. Как я могу сделать с Слим Framework БлагодаряВ шаблоне Как напечатать ссылку с названия маршрута

Мой маршрут

<?php 
// index : home 
$app->get('/home', function() use ($app){ 
    $app->render('home.php'); 
})->name('home'); 

Мой шаблон

<div> 
    <a href="<?php echo $this->tr("home"); // This doesn't work ?>">my home link</a> 
</div> 

или с urlFor()

<div> 
    <a href="<?php echo $this->urlFor("home"); // This doesn't work ?>">my home link</a> 
</div> 

Я получил это сообщение

=> Call to undefined method Slim\View::urlFor() 

ответ

1

Я нашел решение

просто добавить этот

$app->hook('slim.before.router', function() use ($app) { 
    // Pass in the App so we can use urlFor() to generate routes 
    $app->view()->setData('app', $app); 
}); 

затем в шаблоне вы можете использовать это (с приложение не это):

<div> 
    <a href="<?php echo $app->urlFor("home"); ?>">my home link</a> 
</div> 
0

ИЛИ:

echo '<a href="' . Slim\Slim::getInstance()->urlFor('home') . '">home</a>'; 
+3

Пожалуйста, добавьте объяснение своего ответа. – T0xicCode

3

Тонкий экземпляр доступен через Singleton и его метод getInstance

<a href="<?php echo Slim\Slim::getInstance()->urlFor('home'); ?>">my home link</a> 

Вы также можете указать имя, если у вас есть несколько экземпляров Слим

<a href="<?php echo Slim\Slim::getInstance('blog')->urlFor('home'); ?>">my home link</a> 

Если вы хотите получить доступ к методу urlFor, используя $this

<a href="<?php echo $this->urlFor("home");">my home link</a> 

Затем вы должны создать пользовательский вид, добавив подкласс Slim\View, содержащего метод urlFor и связать его с Слим

Пользовательский класс:

<?php 
class CustomView extends \Slim\View 
{ 
    public function urlFor($name, $params = array(), $appName = 'default') 
    { 
     return Slim::getInstance($appName)->urlFor($name, $params); 
    } 
} 

Linking:

<?php 
require 'CustomView.php'; 

$app = new \Slim\Slim(array(
    'view' => new CustomView() 
)); 
Смежные вопросы