2017-01-29 3 views
0

Я использую запрос ajax post для отправки данных в мою базу данных с использованием Slim 3. Все данные отправляются и вставляются в мою базу данных правильно, но это не будет перенаправить на путь GET.Slim 3 - Невозможно перенаправить маршрут с параметрами GET из запроса на отправку ajax

Ajax Почтовый индекс запроса

jQuery(function() { 
     _accent.click(function() { 
      fpd.getProductDataURL(function(dataURL) { 
       var sku = Math.floor((Math.random() * 10000000000) + 1); 
       $.ajax({ 
        type: "POST", 
        url: "{{ path_for('product.createProductAccent', {sku: product.sku}) }}", 
        data: { 
         sku: sku, 
         img: dataURL 
        } 
       }); 
      }); 
     }); 
    }); 

Это мои маршруты

$app->post('/golf-bags/accent/{sku}', ['Base\Controllers\ProductController', 'createProductAccent'])->setName('product.createProductAccent'); 
$app->get('/golf-bags/accent/{sku}/{hash}', ['Base\Controllers\ProductController', 'getProductAccent'])->setName('product.getProductAccent'); 

Это мой ProductController POST и GET функции

public function createProductAccent($sku, Request $request, Response $response) { 
    $product = Product::where('sku', $sku)->first(); 
    $hash = bin2hex(random_bytes(32)); 

    $uploads = Upload::where('sku', $sku)->first(); 

    $path = __DIR__ . '/../../public/assets/uploads/'; 

    $img = $request->getParam('img'); 
    $img = str_replace('data:image/png;base64,', '', $img); 
    $img = str_replace(' ', '+', $img); 
    $data = base64_decode($img); 
    $file = mt_rand() . '.png'; 
    file_put_contents($path . $file, $data); 

    $sku = $request->getParam('sku'); 

    $uploads = Upload::create([ 
     'sku' => $sku, 
     'hash' => $hash, 
     'accent_colour' => $file 
    ]); 
    /**** 
    ALL THE CODE RUNS UPTO HERE AND INSERTS INTO DB 
    BUT WILL NOT REDIRECT WITH THE RESPONSE BELOW 
    ****/ 
    return $response->withRedirect($this->router->pathFor('product.getProductAccent', [ 
     'sku' => $sku, 
     'hash' => $hash 
    ])); 
} 

public function getProductAccent($sku, $hash, Request $request, Response $response) { 
    $product = Product::where('sku', $sku)->first(); 
    $design = Design::where('sku', $sku)->first(); 
    $uploads = Upload::where('hash', $hash)->first(); 
    $colours = Colour::all(); 

    $array = []; 

    foreach($colours as $colour) { 
     $array[] = $colour->hex_colour_bg; 
    } 

    return $this->view->render($response, 'product/product-design-accent.php', [ 
     'product' => $product, 
     'design' => $design, 
     'uploads' => $uploads, 
     'colours' => json_encode($array) 
    ]); 
} 

Не уверен, что я есть здесь не так, но он просто не будет перенаправлен на функцию GET.

+0

Вы вставляете маршрутизатор в свой контроллер в конструкторе? – jmattheis

+0

Да, это на моем «BaseController», который мой «ProductController extends» – John

+0

уверен, что он не перенаправляется? Значит, URL не изменился? – jmattheis

ответ

0
public function getProductAccent($sku, $hash, Request $request, Response $response) { 

В стройной 3 3 аргумента является args -array, который содержит переменные пути, так что вы на самом деле нужно сделать это:

public function getProductAccent(Request $request, Response $response, $args) { 
    $sku = $args['sku']; 
    $hash = $args['hash']; 

В вас метод создания такой же

public function createProductAccent($sku, Request $request, Response $response) { 

до

public function createProductAccent(Request $request, Response $response, $args) { 
    $sku = $args['sku']; 
+0

Если я вставляю вручную в браузере URL с 'sku' и' hash', он извлекает данные, но он даже не доходит до этой точки, потому что он не будет перенаправлен в первую очередь. В моем коде выше я прокомментировал, когда код запускается и не будет запускать перенаправление – John

+0

@John см. Обновление – jmattheis