在模板中如何从路径名称打印链接

时间:2014-02-12 14:58:09

标签: php routes slim

我想在我的模板中使用路径名称(主页)显示链接。 如何使用Slim 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()

3 个答案:

答案 0 :(得分:3)

可以通过Singleton及其getInstance方法

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

如果您有多个Slim实例

,也可以指定名称
<a href="<?php echo Slim\Slim::getInstance('blog')->urlFor('home'); ?>">my home link</a>

如果您想使用$this

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

然后,您应该通过添加包含Slim\View方法的urlFor子类来创建自定义视图,并将其链接到Slim

自定义类:

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

链接:

<?php
require 'CustomView.php';

$app = new \Slim\Slim(array(
    'view' => new CustomView()
));

答案 1 :(得分: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>

答案 2 :(得分:0)

OR:

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