Ответ jszobody, вероятно, лучший, поскольку у вас уже есть представления для каждой сделанной версии, но в будущем я бы рассмотрел макеты контроллеров.
В основном, что вам нужно сделать, это построить два макета, один для мобильных и один для немобильных и установить их в конструкторе BaseController
. Эти макеты будут содержать все необходимые стили, navbar или что-то еще, что все ваши взгляды должны иметь вместе.
public function __construct()
{
$this->layout = Agent::isMobile() ? 'layouts.mobile' : 'layouts.nonMobile';
}
Обе макеты будут иметь @yields('content')
дать ему раздел контента, и все ваши взгляды должны быть только беспокоюсь о содержании, которое показывает в макетах.
Тогда все, что вам нужно сделать, это не возвращать представление в ваших контроллерах, просто установите раздел содержимого в макете.
$this->layout->content = View::make('user.content');`
Это то, что я делаю в своих личных проектах, и это обычно хорошо работает. Если вы хотите поэкспериментировать с новым макетом сайта или вам нужно добавить макет мобильного устройства или даже макет администратора, просто создайте макет, измените значение BaseController::__constructor()
, чтобы установить его, когда вам нужно, и все готово.
спасибо. Выполняет ли абстракция предотвращение выполнения функции isMobile для каждого запроса? – horse
Нет, 'isMobile()' все равно будет вызываться по каждому запросу, так как он является частью макроса для каждого вызова действия контроллера. Основная цель этой абстракции - просто очистить ваш код контроллера и освободить от повторяющегося кода. – jszobody
Когда я вхожу «композитор требует, чтобы jenssegers/agent» или «» требовали jenssegers/agent: dev-master, он дает ошибку. «Композитор-композитор обновления» и «самообновление композитора» не решают проблемы. – horse