Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Ситуация такова. Есть страница, на которой необходимо загружать данные по средством аякса (админская часть),
Нужно сформировать какие либо данные, отрендерить шаблон и все это вернуть json массивом.
Вроде все ок получается, но возникает странная ситуация.
В роутинг и код отправки запроса думаю вникать не стоит, странности творятся в контроллере. Если делать так
public function testJson(){
$out = array();
if(Request::ajax()){
$out['jsonContent'] = array(View::make('admin.testAjax'));
}
return $out;
}
то в бразузер приходит пустой массив, а если сделать так
public function testJson(){
$out = array();
if(Request::ajax()){
$out['jsonContent'] = array(View::make('admin.testAjax').'');
}
return $out;
}
или так
public function testJson(){
$out = array();
$responce = '';
if(Request::ajax()){
$responce .= View::make('admin.testAjax');
$out['jsonContent'] = array($responce);
}
return $out;
}
то все нормально, необходимые данные возвращаются.
Что здесь не так??? Есть ли какой либо еще специльный метод для обработки шаблонов?
Сервер Apache, пробовал на двух версиях php 5.4.4 и 5.5.5, может где-нибудь у меня не правильные настройки сервера? Так как арендую сервак без всяких лишних панелей управления и все настройки делаю вручную.
Изменено sharov (18.11.2013 08:24:38)
Не в сети
и все это вернуть json массивом
В лоб не вижу у вас возврата json
Если возвращаете json, так и возвращайте его
return Response::json($array);
У вас получается аякс или не аякс, всё равно вернёт ответ 200 ?
И возвращаете вы обычный массив?
If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.
Не в сети
В лоб не вижу у вас возврата json
следуя докам ларавел вернет ответ в json даже без явного указания если запрос данных пришел через ajax
И возвращаете вы обычный массив?
а можно вернуть волшебный?
У вас получается аякс или не аякс, всё равно вернёт ответ 200 ?
с роутингом все ок
А вопрос явный почему View::make('admin.testAjax') вернет пустое значение, а View::make('admin.testAjax').'' или (string)View::make('admin.testAjax') вернет то что было в шаблоне
Не в сети
Не в сети
}%Сделайте dd(View::make('admin.testAjax')) и посмотрите насколько это "пустое значение". А преобразовав View::make('admin.testAjax') в строку вы и получаете строку.
хм...
ясно, а тогда не подскажете как отрендерить шаблон и получить на выходе строку а не объект?
мне надо в браузер вернуть массив
$out['content'] = array(
'то что получилось после обработки шаблона',
'append'
)
Изменено sharov (18.11.2013 14:31:34)
Не в сети
Ну вы хоть доки изредка читайте
View::make('admin.testAjax')->render()
Не в сети
Открываем исходники класса View, видим что когда вы пытаетесь преобразовать класс в строку вызывается метод __toSting(), а в нем мы видим:
public function __toString()
{
return $this->render();
}
Т.е. тоже самое что я вам написал выше
Чаще смотрите в исходный код, потому что в официальной документации не всегда все данные и моменты отображены
https://github.com/laravel/framework/bl … w.php#L351
Изменено vanchelo (18.11.2013 15:54:02)
Не в сети
Пока не до конца разобрался с идеологией фреймворка, да и исходниками
Пытался вызвать View::render() напрямую
Спасибо за помощь.
Не в сети
>>> Пытался вызвать View::render() напрямую
Так ничего не выйдет, потому что метод render применим только к объекту класса View, это не статический метод. Еще советую почитать документацию на php.net что такое классы
Не в сети
То что вы видете в Ларавел 4 через :: это не тоже самое что и в Ларавел 3. Если вы опять же, посмотрите в исходный код Л4, то статических методов вы там почти не найдете (их там очень мало), а View::make() это всего лишь обертка над app('view')->make() или App::make('view') или $app['view'] в зависимости от контекста, т.к. сказать для удобства
Изменено vanchelo (18.11.2013 17:31:39)
Не в сети
Artdevue пишет:И возвращаете вы обычный массив?
а можно вернуть волшебный?
вы же сами написали - вернуть json массивом. Так-что называйте как хотите.
Artdevue пишет:У вас получается аякс или не аякс, всё равно вернёт ответ 200 ?
с роутингом все ок
Если всё Ок, тогда смысл проверять ещё раз на аякс в контролере? Если я вас правильно понял, то вы проверили в роуторе.
А вообще, я больше увидел в ваших сообщениях превосходство в познаниях перед отвечающим.
Тогда лучше помолчать....
If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.
Не в сети
Страницы 1