Как включить Smarty 3 в Laravel 4?

Я новичок в Laravel, так что все еще привыкаю к ​​концепциям, однако у меня есть около 10 лет опыта использования Smarty. Поэтому я хочу извлечь из этого выгоду (кроме того факта, что Blade, похоже, не хватает слишком многих функций, которые я считаю полезными и готовыми в Smarty, но в любом случае, помимо сути вопроса).

Я искал вокруг, чтобы найти правильный способ использования Smarty в Laravel, и хотя на нескольких форумах, таких как Вот кажется возможным, неясно, что мне нужно сделать, чтобы правильно использовать его в рамках. Более конкретно мои вопросы:

  1. Какой пакет Composer я должен включить в свой composer.json? Кажется, есть этот который включает в себя сам Smarty, потому что он был изменен (не слишком заинтересован в этом). А также Вот они также предлагают http://bundles.laravel.com/bundle/SmartyView. Не уверен, что это то же самое, потому что поддомен пакетов laravel.com даже не подходит. Раньше он появлялся несколько дней назад, но я не знаю, отключили ли они его, потому что пакеты устарели и заменены пакетами … не уверен. Существует также этот

  2. Как мне настроить Laravel для использования представлений Smarty вместо представлений Blade?

  3. Учитывая, что Laravel использует красивые URL-адреса в стиле REST, как мне включить файлы CSS и JS из Smarty?
    взгляды, такие, что путь к ним динамически задается Laravel? В Blade вы делаете что-то вроде: {{ HTML::style('css/style.css') }}, Могу ли я использовать что-то подобное? Или лучше установить переменную шаблона из кода, вызвав класс HTML? (Мне не очень нравится вызывать код PHP внутри шаблонов, которые должны просто выполнять логику представления.)

Извините, если некоторые вопросы немного тривиальны.

4

Решение

Итак, после еще одного исследования мне удалось безболезненно интегрировать 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');

Надеюсь, что это полезно для кого-то еще.

13

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]