Я новичок в Laravel, так что все еще привыкаю к концепциям, однако у меня есть около 10 лет опыта использования Smarty. Поэтому я хочу извлечь из этого выгоду (кроме того факта, что Blade, похоже, не хватает слишком многих функций, которые я считаю полезными и готовыми в Smarty, но в любом случае, помимо сути вопроса).
Я искал вокруг, чтобы найти правильный способ использования Smarty в Laravel, и хотя на нескольких форумах, таких как Вот кажется возможным, неясно, что мне нужно сделать, чтобы правильно использовать его в рамках. Более конкретно мои вопросы:
Какой пакет Composer я должен включить в свой composer.json
? Кажется, есть этот который включает в себя сам Smarty, потому что он был изменен (не слишком заинтересован в этом). А также Вот они также предлагают http://bundles.laravel.com/bundle/SmartyView. Не уверен, что это то же самое, потому что поддомен пакетов laravel.com даже не подходит. Раньше он появлялся несколько дней назад, но я не знаю, отключили ли они его, потому что пакеты устарели и заменены пакетами … не уверен. Существует также этот
Как мне настроить Laravel для использования представлений Smarty вместо представлений Blade?
Учитывая, что Laravel использует красивые URL-адреса в стиле REST, как мне включить файлы CSS и JS из Smarty?
взгляды, такие, что путь к ним динамически задается Laravel? В Blade вы делаете что-то вроде: {{ HTML::style('css/style.css') }}
, Могу ли я использовать что-то подобное? Или лучше установить переменную шаблона из кода, вызвав класс HTML? (Мне не очень нравится вызывать код PHP внутри шаблонов, которые должны просто выполнять логику представления.)
Извините, если некоторые вопросы немного тривиальны.
Итак, после еще одного исследования мне удалось безболезненно интегрировать Smarty 3 в Laravel 4. Я не уверен, что это лучший способ, но он работает отлично, поэтому открыт для комментариев или дальнейших предложений.
Я установил этот Smarty View для Laravel и следуйте инструкциям, чтобы добавить его в список providers
в app/config/app.php
, После запуска php artisan config:publish latrell/smarty
Команда конфигурации была создана автоматически, и я был готов к работе. Этот пакет также использует надлежащие библиотеки Smarty, а не некоторые измененные шаблоны.
Затем я просто создал простой старый файл HTML, с .tpl
расширение в app/views
каталог и соответствующий контроллер в app/controllers
каталог вместе с соответствующим маршрутом в routes.php
и эй престо, это работало без помех.
Я даже изменил 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>
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"));
}
}
HelloWorldController.php
class HelloWorldController extends BaseController
{
public function showHelloWorld()
{
$this->addTemplateVar('name', 'World!');
return View::make('helloworld', $this->template_vars);
}
}
В routes.php
:
Route::get('helloworld', 'HelloWorldController@showHelloWorld');
Надеюсь, что это полезно для кого-то еще.
Других решений пока нет …