jbx*_*jbx 4 php smarty laravel
我是Laravel的新手,所以仍然习惯了这些概念,但是我有大约10年使用Smarty的经验.所以我希望利用这一点(除了Blade似乎缺少太多我认为有用的功能并且在Smarty中开箱即用,但无论如何除了这个问题之外).
我一直在四处寻找在Laravel中使用Smarty的正确方法,虽然在这里的一些论坛上似乎有可能不清楚我需要做什么才能在框架内正确使用它.更具体地说,我的问题是:
我应该在哪个Composer包中加入composer.json?似乎有这个包括Smarty本身,因为它被修改(不太热衷于此).而在这里,他们也建议http://bundles.laravel.com/bundle/SmartyView.不确定它是否相同,因为laravel.com的捆绑子域甚至没有出现.它曾经出现在几天前,但我不知道他们是否将其关闭,因为捆绑包现在已经过时并被包裹取代......不确定.还有这个
我应该如何配置Laravel使用Smarty视图而不是Blade视图?
鉴于Laravel使用REST风格的漂亮URL,我应该如何在Smarty视图中包含CSS和JS文件,以便它们的路径由Laravel动态设置?在Blade中你会做一些事情:{{ HTML::style('css/style.css') }}.我可以使用类似的东西吗?或者更好的是通过调用HTML类从代码中设置模板变量?(我真的不喜欢在模板中调用PHP代码,而这些模板应该只是在做表示逻辑.)
对不起,如果有些问题有点微不足道.
jbx*_*jbx 13
好吧,经过一些更多的研究,我设法将Smarty 3无痛地整合到Laravel 4.我不确定它是否是最好的方式,但它的工作完美,所以对评论或进一步的建议持开放态度.
我为Laravel 安装了这个 Smarty View并按照说明将其添加到in的列表providers中app/config/app.php.运行php artisan config:publish latrell/smarty命令后,配置自动创建,我准备好了.这个包似乎也使用了适当的Smarty库而不是一些修改过的模板.
然后,我创建了一个普通的旧HTML文件,.tpl在app/views目录中有一个扩展名,目录中有一个相应的控制器app/controllers,以及相应的路由routes.php和嘿presto,它工作顺利.
我甚至修改了BaseController以维护一个常见的模板变量列表(例如CSS样式等),以便在HTML中注入而不会在模板中放置丑陋的PHP代码.(我不知道是否有更好的方法来直接设置他们进入View从BaseController,而不是预期的子类通过他们在调用该make方法,但我想这就是一个不同的问题.)
以下代码可能需要它:
HelloWorld.tpl
<!doctype html>
<html lang="en">
<head>
<title>Hello World</title>
<meta charset="UTF-8">
{$style}
</head>
<body>
<div>
<h1>Hello {$name}</h1>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
BaseController.php
class BaseController extends Controller {
protected $template_vars = array();
protected function addTemplateVar($key, $value)
{
$this->template_vars[$key] = $value;
}
/**
* Setup the layout used by the controller.
*
* @return void
*/
protected function setupLayout()
{
//not sure if I need this any more since I am using Smarty
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
$this->addTemplateVar("style", HTML::style("css/bootstrap.css"));
}
}
Run Code Online (Sandbox Code Playgroud)
HelloWorldController.php
class HelloWorldController extends BaseController
{
public function showHelloWorld()
{
$this->addTemplateVar('name', 'World!');
return View::make('helloworld', $this->template_vars);
}
}
Run Code Online (Sandbox Code Playgroud)
在routes.php:
Route::get('helloworld', 'HelloWorldController@showHelloWorld');
Run Code Online (Sandbox Code Playgroud)
希望它对其他人有用.
| 归档时间: |
|
| 查看次数: |
4960 次 |
| 最近记录: |