2014-09-17 2 views
4

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

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

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

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

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

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

+2

Я думаю, вам стоит попробовать Blade. У меня также есть большой опыт работы с шаблонами Smarty, но теперь я также изучаю Laravel и использую Blade. На самом деле почти все системы шаблонов делают то же самое, и некоторые из них имеют больше функций, чем другие, но почти всегда достаточно, чтобы генерировать желаемый результат. –

+0

@ MarcinNabiałek Спасибо. Я пробовал это немного, но синтаксис ужасен, непоследователен порой и настолько запутанный и разбитый (шаблоны против макетов и все такое), что его будет сложно использовать веб-дизайнерами. С дисциплиной Smarty шаблоны почти загружаются даже в таких инструментах, как Dreamweaver. – jbx

+0

Просто голова, есть причина, по которой лезвие было заложено. Скорее всего, вам придется разрывать ларавелл, чтобы реализовать его. – castis

ответ

13

ОК, поэтому после нескольких исследований мне удалось безболезненно интегрировать Smarty 3 в Laravel 4. Я не уверен, что это лучший способ, но он отлично работает, так что он открыт для комментариев или дальнейших предложений.

Я установил this 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', '[email protected]'); 

Надежда его полезным для кого-то другого.

+3

+1 для решения. Может быть полезно кому-то в будущем –

+0

Очень хорошо! Помогли! Спасибо! – user1029829

+0

Обратите внимание, что на данный момент проблема с Smarty в композиторе (packagist). 'comper update' ломается на данный момент с помощью Smarty 3.1.20 из-за ошибки в' composer.json'. Уже есть исправление, но не на стабильной ветке. – jbx

Смежные вопросы