Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Передать переменную из одного метода контроллера в другой » 15.05.2019 21:09:29

С потерей реквеста между методами справился так:

class TestController extends Controller
{
    private $x;
    public function search(Request $ request)
    {
       $result= Post::where('title',$request->get('title'))->get();//для примера
       $this->x=$result;
       return $this->x;
    }
   public function index (Request $request)
   {
      $this->search($request);
      $r=$this->x;
      $request->flash();//кладу в сессию
      return view ('search.result','r'=>$r);
   }
    public function message($request)                          
    {   
         $request->request->add($request->old());    //реквест пустой, но я в него из сессии кладу "старый" реквест
         $this->search($request);
         $r=$this->x;
        return Excel::download(new SearchExport($r, 'export.xlsx');
    }    
}

всё как мне надо, но запроса по прежнему два одинаковых...

#2 Re: Laravel 5.x » Передать переменную из одного метода контроллера в другой » 15.05.2019 19:28:41

DemiurgeБлагодарю за ответ.
Вот так работает, как мне надо:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
    private $x;
 
    public function index()
    {
        $this->x ='111';
    }
 
    public function message()
    {   $this->index();
        echo  '$this->x= '. $this->x;
    }    
}

На самом деле у меня в методе  index формируется коллекция  eloquent -  результат поиска, и по нажатию кнопки выводится вьюшка с результатами поиска, а в метод  message я пытаюсь передать из метода index эту самую коллекцию, чтобы потом при нажатии кнопки "Экспорт" на вьюшке с результатами происходил экспорт в  Excel, как то так:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use App\Exports\SearchExport;
use Maatwebsite\Excel\Facades\Excel;
 
class TestController extends Controller
{
    private $x;
 
    public function index(Request $ request)
    {
       $result= Post::where('title',$request->get('title'))->get();//для примера
       $this->x=$result;
       return view('search.result',['$res'=>$result]);
    }

    public function message()//сюда хочу передать коллекцию чтобы 2 раза не считать поисковый запрос
    {
        return Excel::download(new SearchExport($this->x), 'export.xlsx');
    }    
}

Ведь если я сделаю так:

class TestController extends Controller
{
    private $x;
    public function search(Request $ request)
    {
       $result= Post::where('title',$request->get('title'))->get();//для примера
       $this->x=$result;
       return $this->x;
    }
   public function index (Request $request)//выводит результат во вьюшку при нажатии кнопки поиск на форме поиска
   {
      $this->search($request);
      $r=$this->x;
      return view ('search.result','r'=>$r);
   }
    public function message($request)//метод вызывается при нажатии на кнопку экспорт на странице, на которой уже посчитан и отображён 
                                     //результат поиска
    {    $this->search($request);//а тут я ещё раз всё ищу в БД
         $r=$this->x;
        return Excel::download(new SearchExport($r, 'export.xlsx');
    }    
}

как тут выкрутиться красиво?
PS когда я вызываю $this->search($request) в методе message,  Request  будет другой, и как следствие,  в excel  отобразится совсем не то,что во вьюшке..печаль

#3 Laravel 5.x » Передать переменную из одного метода контроллера в другой » 15.05.2019 09:48:48

Landser
Ответов: 4

Доброго времени суток. Использую Laravel 5.8.17, Apache 2.4, Windows7, MS SQL 2012. Хочу передать переменную из одного public метода в другой:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
 
class TestController extends Controller
{
    private $x;
 
    public function index()
    {
        $this->x ='111';
        echo '$this->x= '. $this->x;
    }
 
    public function message()
    {
        echo  '$this->x= '. $this->x;
    }    
}

когда вызываю метод index - выводит $this->x=111, когда вызываю метод message - выводит $this->x= и не видит значение из метода index. Все clear команды и composer dump-autoload выполнял.

Наверняка кто-то пытался такое или подобное делать. В оригинале пытаюсь передать из одного метода в другой результат запроса, так что в сессию его не хочу класть да и в Cache тоже...
Спасибо.

#4 Laravel 5.x » Разграничить доступ к таблицам БД для разных пользователей » 03.01.2018 23:02:54

Landser
Ответов: 1

Доброго времени суток.
  Наведите пожалуйста на мысль: как сделать разграничения доступа к таблицам  MSSQL для разных пользователей моего приложения:
например, пользователю Alex к таблице Sales  разрешить только select, пользователю Boris  select и insert  и  тд, причём желательно делать это гибко, как это можно делать средствами SQL Server Management Studio.
  У меня есть пользователи домена и роли для них, заданные в SQL Server Management Studio, которые всё это обеспечивают, но не знаю, как обращаться к БД от имени текущего пользователя, поэтому хочу сделать авторизацию пользователей в вэб приложении, которая идёт из коробки, и уже как то потом для них задавать роли. Прошу помощи форумчан. Спасибо!
Версия Laravel: 5.5.22
Версия PHP: 7.1.12
Операционная система и её версия: Windows Server 2008 R2
Вендор и версия сервера БД:  MSSQL Server 2012
Вендор и версия Веб-сервера: Apache 2.4.23

#5 Laravel 5.x » Ошибка при выполнении миграции в 5.5.20 » 14.11.2017 19:24:41

Landser
Ответов: 0

Доброго времени суток.
Версия Laravel:5.5.20
Версия PHP:7.0.13
Операционная система и её версия:Windows Server 2008 R2 Enterprise
Вендор и версия сервера БД: Microsoft SQL Server 2012 - 11.0.5058.0 (X64) Enterprise Edition (64-bit)  (Build 7601: SP 1)
Вендор и версия Веб-сервера: Apache 2.4.23
Метод подключения PHP: apache2_4.dll
Задача, что должно происходить _в целом_, техническое задание:
   При создании миграции через  artisan и её выполнении должны создаваться таблица в  моей БД - нет результата
Что произошло, текст ошибки, если есть:
   ошибка  при выполнении  команды php artisan migrate

[Illuminate\Database\QueryException]
SQLSTATE[HY000] [2002] Подключение не установлено, т.к. конечный компьютер
отверг запрос на подключение.
(SQL: select * from information_schema.tables where table_schema = homeste
ad and table_name = migrations)
[PDOException]
SQLSTATE[HY000] [2002] Подключение не установлено, т.к. конечный компьютер
отверг запрос на подключение.

Варианты/догадки, почему это произошло:
Как видно из текста ошибка-не происходит соединение с SQL сервером.Что было предпринято для устранения ошибки:
  для учётки, из под которой соединяюсь с БД, дал все возможные разрешения для моей БД
привожу  .env и config\database.php
.env

DB_CONNECTION=sqlsrv
DB_HOST=127.0.0.1
DB_PORT=1433
DB_DATABASE='TZ'
DB_USERNAME='laravel'
DB_PASSWORD='123456'

config\database.php

'default' => env('DB_CONNECTION', 'sqlsrv'),
..........................................
    'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'TZ'),
            'username' => env('DB_USERNAME', 'laravel'),
            'password' => env('DB_PASSWORD', '123456'),
            'charset' => 'utf8',
            'prefix' => '',
        ],

для имени хоста пробовал писать localhost не помогло. Есть ещё виртуальная машина , где Windows 7, apache 2.4.26 и PHP 7.0.21 - та же ошибка при создании миграции. PDO, Microsoft odbc drivrer for Sql Server, sqlsrv  для php установлены, на php,но не из под laravel нормально с ними работаю.
Прошу помощи форумчан, тк если нет соединения с БД, то это безысходность полная.Спасибо.


UPD
вот что помогло, может кому пригодится:

В конфигурации сервера(Диспетчер конфигурации - Сетевая конфигурация SQL сервер - протоколы для <имя экземпляра> - TCP-IP - IP-адреса) есть группа параметров IPAll, вот там тоже надо было указать порт (1433), чтобы соединения на порт 1433 заработали.

http://www.sql.ru/forum/1084876/windows … ql-2008-r2 - последний пост. Ну и службу потом перезапускаем.

#6 Re: Общий раздел » Не работает роутинг » 02.07.2017 11:30:20

..их нужно вызывать с помощью EXEC и оказалось что это работает

ну и замечательно, то что надо. думаю и параметры в них тоже можно будет передавать.

скорее всего view должны поддерживать SELECT

ещё как поддерживают:) Вьюшка, как правило - один большой громоздкий select со вложенными запросами из многих таблиц, по крайней мере в моём случае это так.

#7 Re: Общий раздел » Не работает роутинг » 01.07.2017 21:57:49

constb, спасибо за ответ.

\DB::connection() без проблем выбирает данные из процедур на ms sql

Вы имеете ввиду, что если процедура возвращает набор строк, то тогда можно работать с этими строками? Если так, то впринципе меня это устраивает, тк мои хранимки формируют отчёты в основном
Потом Вы говорите

но вот касательно построителя запросов и моделей элоквента – «меня терзают смутные сомнения». всё упирается в синтаксис запроса – можно ли ко view и stored_proc обращаться как к обычной таблице SELECT-ом.

Тут Вы имеете ввиду, что будут трудности именно в создании хранимых процедур и вьюшек на лету? Так мне и не надо это вроде, пока..Работать планирую с уж готовыми из бд, просто исполнять, я так понял, что это возможно.. Просто не добрался ещё то той части функционала фрейма, которая работает с бд.

#8 Re: Общий раздел » Не работает роутинг » 01.07.2017 12:51:03

Спасибо, Cheshirrski, золотой Вы человек. А разрешите ещё вопрос, он вообщем то офф-топ, но ужасно мне интересен:

  Задумал полностью перевести свой костыльный проект в локальной сети на лара, тк он разросся и превратился в тихий ужас. Костыль-проект работает с бд на MS SQL, и часть фунцкионала обеспечивают представления и хранимые процедуры.

Вопрос: смогут ли те инструменты (понятное дело, что я ещё до них не добрался), которые предоставляет фрейм работать со всеми этими view  и storred_proc?

Спасибо.

#9 Общий раздел » Не работает роутинг » 01.07.2017 10:18:29

Landser
Ответов: 7

Доброго времени суток!
Установил фреймворк версии 5.4.27, увидел главную страницу Laravel, пытаюсь проверить его работу, отобразив Hello world. В  app/http/ файл route.php не создался (а должен ли?), создал его вручную, и в нём прописал

Route::get('/', function () {
return 'Hello World';
});

И хочу при попадании на адрес localhost/laravel/public увидеть Hello world, но ничего не происходит, по прежнему вижу главную Laravel.

ОС Windows 7, Apache 2.4.23, php 7.1.6, mod_rewrite в Apache включён, .htaccess в public не трогал.
Это мой первый пост на форуме, понимаю, что вопрос относиться к категории faq для чайников, но такового не нашёл.  Прошу помочь, тк понимаю, что без освоения роутинга продвигаться дальше не смогу, а очень бы хотелось разобраться во фреймворке.

Подвал раздела